diff options
author | Jeremy Allison <jra@samba.org> | 2007-03-06 22:01:03 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:18:26 -0500 |
commit | 4816af5ce9070385b292f666779a24057b39e457 (patch) | |
tree | 9cbe595665d515dcdf18f47e9bb6fafa8b1f5d32 /source/lib/system.c | |
parent | 1b063496f93f78347a6e67549bde54c845499a7d (diff) | |
download | samba-4816af5ce9070385b292f666779a24057b39e457.tar.gz samba-4816af5ce9070385b292f666779a24057b39e457.tar.xz samba-4816af5ce9070385b292f666779a24057b39e457.zip |
r21725: Fix for memalign used without test guards. Was
breaking the build on *BSD's. Tested by Herb.
Jeremy.
Diffstat (limited to 'source/lib/system.c')
-rw-r--r-- | source/lib/system.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/source/lib/system.c b/source/lib/system.c index 20b31113ecd..eaebc7190f0 100644 --- a/source/lib/system.c +++ b/source/lib/system.c @@ -47,20 +47,35 @@ A wrapper for memalign ********************************************************************/ -void* sys_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 } |