replace: Move memalign() from lib/util/system.c to libreplace.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 24 Mar 2012 13:43:21 +0000 (14:43 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 24 Mar 2012 13:43:21 +0000 (14:43 +0100)
lib/replace/libreplace.m4
lib/replace/replace.c
lib/replace/replace.h
lib/replace/wscript
lib/util/system.c
source3/lib/util_malloc.c

index e14fadabf157341ae8d75e1d03e167a6d829b0ce..72de91799c280b47697e18f58a0b5dabbf8b4c79 100644 (file)
@@ -121,9 +121,10 @@ AC_CHECK_HEADERS(stdarg.h vararg.h)
 AC_CHECK_HEADERS(sys/mount.h mntent.h)
 AC_CHECK_HEADERS(stropts.h)
 AC_CHECK_HEADERS(unix.h)
+AC_CHECK_HEADERS(malloc.h)
 
 AC_CHECK_FUNCS(seteuid setreuid setresuid setegid setregid setresgid)
-AC_CHECK_FUNCS(chroot bzero strerror strerror_r)
+AC_CHECK_FUNCS(chroot bzero strerror strerror_r memalign posix_memalign getpagesize)
 AC_CHECK_FUNCS(vsyslog setlinebuf mktime ftruncate chsize rename)
 AC_CHECK_FUNCS(waitpid wait4 strlcpy strlcat initgroups memmove strdup)
 AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp dup2 dprintf vdprintf)
index d9a96ff8ef9219e92cd7ed09b3971b60c6da16f0..f1454cbcd645145a5cc9a8f0f47ad0abdc608ae3 100644 (file)
@@ -828,3 +828,35 @@ int rep_clock_gettime(clockid_t clk_id, struct timespec *tp)
        return 0;
 }
 #endif
+
+#ifndef HAVE_MEMALIGN
+void *rep_memalign( size_t align, size_t size )
+{
+#if defined(HAVE_POSIX_MEMALIGN)
+       void *p = NULL;
+       int ret = posix_memalign( &p, align, size );
+       if ( ret == 0 )
+               return p;
+
+       return NULL;
+#else
+       /* 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 functionality not available on this platform!\n"));
+               return NULL;
+       }
+       if (size < pagesize) {
+               size = pagesize;
+       }
+       return malloc(size);
+#endif
+}
+#endif
index 711241462ead25563aadab1a5d0af6152c5c6901..3f289d7f47bcd3a1519182fc1e48dec66a82618a 100644 (file)
 #include <inttypes.h>
 #endif
 
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+
 #ifndef __PRI64_PREFIX
 # if __WORDSIZE == 64
 #  define __PRI64_PREFIX       "l"
@@ -157,6 +161,11 @@ void *rep_memmem(const void *haystack, size_t haystacklen,
                 const void *needle, size_t needlelen);
 #endif
 
+#ifndef HAVE_MEMALIGN
+#define memalign rep_memalign
+void *rep_memalign(size_t boundary, size_t size);
+#endif
+
 #ifndef HAVE_MKTIME
 #define mktime rep_mktime
 /* prototype is in "system/time.h" */
index 63944c3800b7938fa26cd38f8bac8d480cf55149..e1dc1e6a30891fc367991ffd2f46d766f7e05f74 100644 (file)
@@ -69,7 +69,7 @@ def configure(conf):
     conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
     conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h')
     conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h')
-    conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
+    conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h malloc.h')
     conf.CHECK_HEADERS('syscall.h sys/syscall.h inttypes.h')
 
     conf.CHECK_TYPES('"long long" intptr_t uintptr_t ptrdiff_t comparison_fn_t')
@@ -168,7 +168,7 @@ def configure(conf):
     conf.CHECK_FUNCS('strtok_r mkdtemp dup2 dprintf vdprintf isatty chown lchown')
     conf.CHECK_FUNCS('link readlink symlink realpath snprintf vsnprintf')
     conf.CHECK_FUNCS('asprintf vasprintf setenv unsetenv strnlen strtoull __strtoull')
-    conf.CHECK_FUNCS('strtouq strtoll __strtoll strtoq')
+    conf.CHECK_FUNCS('strtouq strtoll __strtoll strtoq memalign posix_memalign')
 
     # libbsd on some platforms provides strlcpy and strlcat
     if not conf.CHECK_FUNCS('strlcpy strlcat'):
index 8625229404aa4a98e901faa622f31e1b46db9f0a..ab0f1dc6c4d94143ebf8e9744e3e06ca4088c36a 100644 (file)
      expansions/etc make sense to the OS should be acceptable to Samba.
 */
 
-/*******************************************************************
- A wrapper for memalign
-********************************************************************/
-
-void *sys_memalign( size_t align, size_t size )
-{
-#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
-       /* 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 malloc(size);
-#endif
-}
 
 /**************************************************************************
  Wrapper for fork. Ensures we clear our pid cache.
index c052adc41bb64d7ed04d8dae186172650dd1f015..d773d8ffd67bc09578a04f55b3c5c6b806018fc2 100644 (file)
@@ -79,7 +79,7 @@ void *memalign_array(size_t el_size, size_t align, unsigned int count)
                return NULL;
        }
 
-       return sys_memalign(align, el_size*count);
+       return memalign(align, el_size*count);
 }
 
 /****************************************************************************