svn commit: samba r21725 - in branches: SAMBA_3_0/source/lib SAMBA_3_0_25/source/lib

jra at samba.org jra at samba.org
Tue Mar 6 22:01:04 GMT 2007


Author: jra
Date: 2007-03-06 22:01:03 +0000 (Tue, 06 Mar 2007)
New Revision: 21725

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21725

Log:
Fix for memalign used without test guards. Was
breaking the build on *BSD's. Tested by Herb.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/lib/system.c
   branches/SAMBA_3_0/source/lib/util.c
   branches/SAMBA_3_0_25/source/lib/system.c
   branches/SAMBA_3_0_25/source/lib/util.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/system.c
===================================================================
--- branches/SAMBA_3_0/source/lib/system.c	2007-03-06 21:59:51 UTC (rev 21724)
+++ branches/SAMBA_3_0/source/lib/system.c	2007-03-06 22:01:03 UTC (rev 21725)
@@ -47,21 +47,36 @@
  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
 }
 
 /*******************************************************************

Modified: branches/SAMBA_3_0/source/lib/util.c
===================================================================
--- branches/SAMBA_3_0/source/lib/util.c	2007-03-06 21:59:51 UTC (rev 21724)
+++ branches/SAMBA_3_0/source/lib/util.c	2007-03-06 22:01:03 UTC (rev 21725)
@@ -913,17 +913,6 @@
 }
 
 /****************************************************************************
- 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 @@
 		return NULL;
 	}
 
-#if defined(PARANOID_MALLOC_CHECKER)
-	return memalign_(align, el_size*count);
-#else
 	return sys_memalign(align, el_size*count);
-#endif
 }
 
 /****************************************************************************

Modified: branches/SAMBA_3_0_25/source/lib/system.c
===================================================================
--- branches/SAMBA_3_0_25/source/lib/system.c	2007-03-06 21:59:51 UTC (rev 21724)
+++ branches/SAMBA_3_0_25/source/lib/system.c	2007-03-06 22:01:03 UTC (rev 21725)
@@ -47,21 +47,36 @@
  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
 }
 
 /*******************************************************************

Modified: branches/SAMBA_3_0_25/source/lib/util.c
===================================================================
--- branches/SAMBA_3_0_25/source/lib/util.c	2007-03-06 21:59:51 UTC (rev 21724)
+++ branches/SAMBA_3_0_25/source/lib/util.c	2007-03-06 22:01:03 UTC (rev 21725)
@@ -913,17 +913,6 @@
 }
 
 /****************************************************************************
- 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 @@
 		return NULL;
 	}
 
-#if defined(PARANOID_MALLOC_CHECKER)
-	return memalign_(align, el_size*count);
-#else
 	return sys_memalign(align, el_size*count);
-#endif
 }
 
 /****************************************************************************



More information about the samba-cvs mailing list