changeset 7847:35877d1131db HEAD

Added more fallbacks if strtoll() or strtoull() isn't implemented (e.g. HP-UX).
author Timo Sirainen <tss@iki.fi>
date Thu, 12 Jun 2008 23:31:51 +0300
parents f4c53ad3610f
children a1fd8b29f629
files configure.in src/lib/compat.c src/lib/compat.h
diffstat 3 files changed, 27 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/configure.in	Thu Jun 12 23:16:46 2008 +0300
+++ b/configure.in	Thu Jun 12 23:31:51 2008 +0300
@@ -15,7 +15,7 @@
 AC_PROG_LIBTOOL
 AM_ICONV
 
-AC_CHECK_HEADERS(strings.h stdint.h unistd.h dirent.h malloc.h \
+AC_CHECK_HEADERS(strings.h stdint.h unistd.h dirent.h malloc.h inttypes.h \
   sys/uio.h sys/sysmacros.h sys/resource.h sys/select.h libgen.h \
   sys/quota.h sys/fs/ufs_quota.h ufs/ufs/quota.h jfs/quota.h \
   mntent.h sys/mnttab.h sys/event.h sys/time.h sys/mkdev.h linux/dqblk_xfs.h \
@@ -429,9 +429,9 @@
 AC_CHECK_FUNCS(fcntl flock lockf inet_aton sigaction getpagesize madvise \
                strcasecmp stricmp vsyslog writev pread \
 	       setrlimit setproctitle seteuid setreuid setegid setresgid \
-	       strtoull strtouq setpriority quotactl getmntent kqueue kevent \
-	       backtrace_symbols walkcontext dirfd clearenv \
-	       malloc_usable_size)
+	       strtoull strtoll strtoumax strtoimax strtouq strtoq \
+	       setpriority quotactl getmntent kqueue kevent backtrace_symbols \
+	       walkcontext dirfd clearenv malloc_usable_size)
 
 dnl * I/O loop function
 have_ioloop=no
--- a/src/lib/compat.c	Thu Jun 12 23:16:46 2008 +0300
+++ b/src/lib/compat.c	Thu Jun 12 23:31:51 2008 +0300
@@ -17,6 +17,9 @@
 #include <ctype.h>
 #include <unistd.h>
 #include <syslog.h>
+#ifdef HAVE_INTTYPES_H
+#  include <inttypes.h> /* for strtoimax() and strtoumax() */
+#endif
 
 #ifndef INADDR_NONE
 #  define INADDR_NONE INADDR_BROADCAST
@@ -201,7 +204,9 @@
 #ifndef HAVE_STRTOULL
 unsigned long long int my_strtoull(const char *nptr, char **endptr, int base)
 {
-#ifdef HAVE_STRTOUQ
+#ifdef HAVE_STRTOUMAX
+	return strtoumax(nptr, endptr, base);
+#elif defined(HAVE_STRTOUQ)
 	return strtouq(nptr, endptr, base);
 #else
 	unsigned long ret = 0;
@@ -220,3 +225,16 @@
 #endif
 }
 #endif
+
+#ifndef HAVE_STRTOLL
+unsigned long long int my_strtoll(const char *nptr, char **endptr, int base)
+{
+#ifdef HAVE_STRTOIMAX 
+	return strtoimax(nptr, endptr, base);
+#elif defined (HAVE_STRTOQ)
+	return strtoq(nptr, endptr, base);
+#else
+	i_panic("strtoll() not implemented");
+#endif
+}
+#endif
--- a/src/lib/compat.h	Thu Jun 12 23:16:46 2008 +0300
+++ b/src/lib/compat.h	Thu Jun 12 23:31:51 2008 +0300
@@ -188,6 +188,10 @@
 #  define strtoull my_strtoull
 unsigned long long int my_strtoull(const char *nptr, char **endptr, int base);
 #endif
+#ifndef HAVE_STRTOLL
+#  define strtoll my_strtoll
+unsigned long long int my_strtoll(const char *nptr, char **endptr, int base);
+#endif
 
 /* ctype.h isn't safe with signed chars,
    use our own instead if really needed */