r21725: Fix for memalign used without test guards. Was
authorJeremy Allison <jra@samba.org>
Tue, 6 Mar 2007 22:01:03 +0000 (22:01 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:26 +0000 (12:18 -0500)
breaking the build on *BSD's. Tested by Herb.
Jeremy.
(This used to be commit 4816af5ce9070385b292f666779a24057b39e457)

source3/lib/system.c
source3/lib/util.c

index 20b31113ecd71a17cd49e6d6d54af11d404eb014..eaebc7190f05492423e38475041b19f75cd7cf01 100644 (file)
  A wrapper for memalign
 ********************************************************************/
 
-voidsys_memalign( size_t align, size_t size )
+void *sys_memalign( size_t align, size_t size )
 {
-#if defined(HAVE_MEMALIGN)
-       return memalign( align, size );
-#elif defined(HAVE_POSIX_MEMALIGN)
-       char *p = NULL;
+#if defined(HAVE_POSIX_MEMALIGN)
+       void *p = NULL;
        int ret = posix_memalign( &p, align, size );
        if ( ret == 0 )
                return p;
                
        return NULL;
+#elif defined(HAVE_MEMALIGN)
+       return memalign( align, size );
 #else
-       DEBUG(0,("memalign functionalaity not available on this platform!\n"));
-       return NULL;
+       /* On *BSD systems memaligns doesn't exist, but memory will
+        * be aligned on allocations of > pagesize. */
+#if defined(SYSCONF_SC_PAGESIZE)
+       size_t pagesize = (size_t)sysconf(_SC_PAGESIZE);
+#elif defined(HAVE_GETPAGESIZE)
+       size_t pagesize = (size_t)getpagesize();
+#else
+       size_t pagesize = (size_t)-1;
+#endif
+       if (pagesize == (size_t)-1) {
+               DEBUG(0,("memalign functionalaity not available on this platform!\n"));
+               return NULL;
+       }
+       if (size < pagesize) {
+               size = pagesize;
+       }
+       return SMB_MALLOC(size);
 #endif
 }
 
index 67c9c8d37a71cf56c10fc2c9997c989cfedd2bfb..b29f459c02e960198e264b1b10cdc9f2f22965d9 100644 (file)
@@ -912,17 +912,6 @@ void *malloc_(size_t size)
 #define malloc(s) __ERROR_DONT_USE_MALLOC_DIRECTLY
 }
 
-/****************************************************************************
- Internal malloc wrapper. Externally visible.
-****************************************************************************/
-
-void *memalign_(size_t align, size_t size)
-{
-#undef memalign
-       return memalign(align, size);
-#define memalign(align, s) __ERROR_DONT_USE_MEMALIGN_DIRECTLY
-}
-
 /****************************************************************************
  Internal calloc wrapper. Not externally visible.
 ****************************************************************************/
@@ -974,11 +963,7 @@ void *memalign_array(size_t el_size, size_t align, unsigned int count)
                return NULL;
        }
 
-#if defined(PARANOID_MALLOC_CHECKER)
-       return memalign_(align, el_size*count);
-#else
        return sys_memalign(align, el_size*count);
-#endif
 }
 
 /****************************************************************************