AC_CHECK_HEADERS([sys/param.h sys/uio.h libgen.h pwd.h grp.h])
AC_CHECK_HEADERS([sys/wait.h sys/mman.h syslog.h netdb.h dlfcn.h])
AC_CHECK_HEADERS([err.h pthread.h endian.h sys/endian.h byteswap.h])
+AC_CHECK_HEADERS([malloc.h])
dnl ucred.h may have prereqs
AC_CHECK_HEADERS([ucred.h sys/ucred.h], [], [], [
#ifdef HAVE_SYS_TYPES_H
AC_CHECK_FUNCS(basename strlcpy strlcat getpeereid sigaction)
AC_CHECK_FUNCS(inet_ntop poll getline)
AC_CHECK_FUNCS(err errx warn warnx getprogname setprogname)
+AC_CHECK_FUNCS(posix_memalign memalign valloc)
### Functions provided only on win32
AC_CHECK_FUNCS(localtime_r recvmsg sendmsg)
### Functions used by libusual itself
--- /dev/null
+/*
+ * Basic C environment.
+ *
+ * Copyright (c) 2007-2009 Marko Kreen
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <usual/base.h>
+
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+
+#ifndef HAVE_POSIX_MEMALIGN
+int posix_memalign(void **ptr_p, size_t align, size_t len)
+{
+ void *p;
+ int ret, old_errno = errno;
+
+#ifdef HAVE_MEMALIGN
+ p = memalign(align, len);
+#else /* !HAVE_MEMALIGN */
+#ifdef HAVE_VALLOC
+ /* assuming less than pagesize alignment */
+ p = valloc(len);
+#else /* !VALLOC */
+ #warning "cannot emulate posix_memalign sanely"
+ p = malloc(len);
+#endif /* !VALLOC */
+#endif /* !MEMALIGN */
+
+ *ptr_p = p;
+ if (p)
+ return 0;
+
+ /* on error restore old errno */
+ ret = errno;
+ errno = old_errno;
+ return ret;
+}
+#endif
+
return calloc(1, len);
}
+#ifndef HAVE_POSIX_MEMALIGN
+#define posix_memalign(a,b,c) usual_memalign(a,b,c)
+int posix_memalign(void **ptr_p, size_t align, size_t len);
+#endif
+
/* cpp expr -> string */
#define _STR_(identifier) #identifier
#define STR(x) _STR_(x)