(_gcry_malloc): Make sure ERRNO is set if we return
authorWerner Koch <wk@gnupg.org>
Tue, 22 Feb 2005 17:49:27 +0000 (17:49 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 22 Feb 2005 17:49:27 +0000 (17:49 +0000)
NULL.  Remove unneeded initialization of M to allow the compiler
to catch errors.
(gcry_realloc): Make sure ERRNO is set if we return NULL>

src/ChangeLog
src/global.c
src/stdmem.c

index 1013176..2c7271d 100644 (file)
@@ -1,3 +1,10 @@
+2005-02-22  Werner Koch  <wk@g10code.com>
+
+       * global.c (_gcry_malloc): Make sure ERRNO is set if we return
+       NULL.  Remove unneeded initialization of M to allow the compiler
+       to catch errors.
+       (gcry_realloc): Make sure ERRNO is set if we return NULL>
+
 2005-02-13  Moritz Schulte  <moritz@g10code.com>
 
        * gcrypt.h: Declare new functions: gcry_ac_data_encrypt_scheme,
@@ -1393,7 +1400,7 @@ Tue Dec  8 13:15:16 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
 
        
  Copyright (C) 1998,1999,2000,2001,2002,2003
-              2004 Free Software Foundation, Inc.
+              2004, 2005 Free Software Foundation, Inc.
 
  This file is free software; as a special exception the author gives
  unlimited permission to copy and/or distribute it, with or without
index dece54e..3560923 100644 (file)
@@ -1,6 +1,6 @@
 /* global.c  - global control functions
  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
- *               2004  Free Software Foundation, Inc.
+ *               2004, 2005  Free Software Foundation, Inc.
  *
  * This file is part of Libgcrypt.
  *
@@ -386,8 +386,8 @@ gcry_set_outofcore_handler( int (*f)( void*, size_t, unsigned int ),
 gcry_err_code_t
 _gcry_malloc (size_t n, unsigned int flags, void **mem)
 {
-  gcry_err_code_t err = GPG_ERR_NO_ERROR;
-  void *m = NULL;
+  gcry_err_code_t err = 0;
+  void *m;
 
   if ((flags & GCRY_ALLOC_FLAG_SECURE) && !no_secure_memory)
     {
@@ -404,8 +404,14 @@ _gcry_malloc (size_t n, unsigned int flags, void **mem)
        m = _gcry_private_malloc (n);
     }
 
-  if (! m)
-    err = gpg_err_code_from_errno (ENOMEM);
+  if (!m)
+    {
+      /* Make sure that ERRNO has been set in case a user supplied
+         memory handler didn't it correctly. */
+      if (!errno)
+        errno = ENOMEM;
+      err = gpg_err_code_from_errno (errno);
+    }
   else
     *mem = m;
 
@@ -457,9 +463,15 @@ _gcry_check_heap( const void *a )
 void *
 gcry_realloc (void *a, size_t n)
 {
+  void *p;
+
   if (realloc_func)
-    return realloc_func (a, n);
-  return _gcry_private_realloc (a, n);
+    p = realloc_func (a, n);
+  else
+    p =  _gcry_private_realloc (a, n);
+  if (!p && !errno)
+    errno = ENOMEM;
+  return p;
 }
 
 void
index 659bc4e..4243af1 100644 (file)
@@ -108,8 +108,8 @@ _gcry_private_malloc_secure( size_t n)
 
 
 /****************
- * realloc and clear the old space
- * Return NULL if there is not enoug memory.
+ * Realloc and clear the old space
+ * Return NULL if there is not enough memory.
  */
 void *
 _gcry_private_realloc( void *a, size_t n )