1997-05-01 03:13 Ulrich Drepper <drepper@cygnus.com>
authorUlrich Drepper <drepper@redhat.com>
Thu, 1 May 1997 01:25:40 +0000 (01:25 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 1 May 1997 01:25:40 +0000 (01:25 +0000)
* sysdeps/unix/sysv/linux/shmat.c (shmat): For Linux-2.0 and up the
kernel can return negative values.  Only fail when return value is
in range in range which is never returned as valid address.
Patch by Bruno Haible <haible@ilog.fr>.

ChangeLog
sysdeps/libm-ieee754/s_cexp.c
sysdeps/unix/sysv/linux/shmat.c

index e94044f..bc00075 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+1997-05-01 03:13  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/unix/sysv/linux/shmat.c (shmat): For Linux-2.0 and up the
+       kernel can return negative values.  Only fail when return value is
+       in range in range which is never returned as valid address.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
 1997-04-30 17:35  Ulrich Drepper  <drepper@cygnus.com>
 
        * math/libm-test.c: Implement test for exceptions.
index 3181af0..6ba5b0a 100644 (file)
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -59,6 +60,10 @@ __cexp (__complex__ double x)
             is not +-inf the result is NaN + iNaN.  */
          __real__ retval = __nan ("");
          __imag__ retval = __nan ("");
+
+#ifdef FE_INVALID
+         feraiseexcept (FE_INVALID);
+#endif
        }
     }
   else if (rcls == FP_INFINITE)
@@ -89,6 +94,11 @@ __cexp (__complex__ double x)
        {
          __real__ retval = HUGE_VAL;
          __imag__ retval = __nan ("");
+
+#ifdef FE_INVALID
+         if (icls == FP_INFINITE)
+           feraiseexcept (FE_INVALID);
+#endif
        }
       else
        {
@@ -101,6 +111,11 @@ __cexp (__complex__ double x)
       /* If the real part is NaN the result is NaN + iNaN.  */
       __real__ retval = __nan ("");
       __imag__ retval = __nan ("");
+
+#ifdef FE_INVALID
+      if (rcls != FP_NAN || icls != FP_NAN)
+       feraiseexcept (FE_INVALID);
+#endif
     }
 
   return retval;
index 2ac07f2..070b00c 100644 (file)
@@ -33,5 +33,6 @@ shmat (shmid, shmaddr, shmflg)
   unsigned long raddr;
 
   retval = __ipc (IPCOP_shmat, shmid, shmflg, (int) &raddr, shmaddr);
-  return retval < 0 ? (void *) retval : (void *) raddr;
+  return ((unsigned long int) retval > -(unsigned long int) SHMLBA
+         ? (void *) retval : (void *) raddr);
 }