OSDN Git Service

* cygmalloc.h (__set_ENOMEM): Declare.
authorcorinna <corinna>
Thu, 8 Feb 2007 11:35:51 +0000 (11:35 +0000)
committercorinna <corinna>
Thu, 8 Feb 2007 11:35:51 +0000 (11:35 +0000)
(MALLOC_FAILURE_ACTION): Call __set_ENOMEM.
* malloc_wrapper.cc (malloc) Remove setting errno here.
(realloc): Ditto.
(calloc): Ditto.
(memalign): Ditto.
(valloc): Ditto.
(posix_memalign): Save and restore errno.

winsup/cygwin/ChangeLog
winsup/cygwin/cygmalloc.h
winsup/cygwin/malloc_wrapper.cc

index 94ac756..46ebb1c 100644 (file)
@@ -1,3 +1,15 @@
+2007-02-08  Christopher Faylor <me@cgf.cx>
+           Corinna Vinschen  <corinna@vinschen.de>
+
+       * cygmalloc.h (__set_ENOMEM): Declare.
+       (MALLOC_FAILURE_ACTION): Call __set_ENOMEM.
+       * malloc_wrapper.cc (malloc) Remove setting errno here.
+       (realloc): Ditto.
+       (calloc): Ditto.
+       (memalign): Ditto.
+       (valloc): Ditto.
+       (posix_memalign): Save and restore errno.
+
 2007-02-07  Corinna Vinschen  <corinna@vinschen.de>
 
        * cygmalloc.h (MALLOC_FAILURE_ACTION): Move to correct #if branch.
index 5d38724..5c2a29a 100644 (file)
@@ -23,7 +23,8 @@ int dlmallopt (int p, int v) __attribute__ ((regparm (2)));
 void dlmalloc_stats ();
 
 #ifndef __INSIDE_CYGWIN__
-# define MALLOC_FAILURE_ACTION
+extern "C" void __set_ENOMEM ();
+# define MALLOC_FAILURE_ACTION __set_ENOMEM ()
 # define USE_DL_PREFIX 1
 #else
 # define __malloc_lock() mallock.acquire ()
index 086c43d..dce4a77 100644 (file)
@@ -70,8 +70,6 @@ malloc (size_t size)
       __malloc_unlock ();
     }
   malloc_printf ("(%d) = %x, called by %p", size, res, __builtin_return_address (0));
-  if (!res)
-    set_errno (ENOMEM);
   return res;
 }
 
@@ -88,8 +86,6 @@ realloc (void *p, size_t size)
       __malloc_unlock ();
     }
   malloc_printf ("(%x, %d) = %x, called by %x", p, size, res, __builtin_return_address (0));
-  if (!res)
-    set_errno (ENOMEM);
   return res;
 }
 
@@ -106,14 +102,14 @@ calloc (size_t nmemb, size_t size)
       __malloc_unlock ();
     }
   malloc_printf ("(%d, %d) = %x, called by %x", nmemb, size, res, __builtin_return_address (0));
-  if (!res)
-    set_errno (ENOMEM);
   return res;
 }
 
 extern "C" int
 posix_memalign (void **memptr, size_t alignment, size_t bytes)
 {
+  save_errno save;
+
   void *res;
   if (!use_internal_malloc)
     return ENOSYS;
@@ -143,8 +139,6 @@ memalign (size_t alignment, size_t bytes)
       __malloc_lock ();
       res = dlmemalign (alignment, bytes);
       __malloc_unlock ();
-      if (!res)
-       set_errno (ENOMEM);
     }
 
   return res;
@@ -164,8 +158,6 @@ valloc (size_t bytes)
       __malloc_lock ();
       res = dlvalloc (bytes);
       __malloc_unlock ();
-      if (!res)
-       set_errno (ENOMEM);
     }
 
   return res;
@@ -299,3 +291,9 @@ malloc_init ()
     }
 #endif
 }
+
+extern "C" void
+__set_ENOMEM ()
+{
+  set_errno (ENOMEM);
+}