From: Timo Sirainen Date: Thu, 12 Jun 2008 20:31:51 +0000 (+0300) Subject: Added more fallbacks if strtoll() or strtoull() isn't implemented X-Git-Tag: 1.2.alpha1~314 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ba7203a434454a0d447f09b3695c32daaa87942;p=thirdparty%2Fdovecot%2Fcore.git Added more fallbacks if strtoll() or strtoull() isn't implemented (e.g. HP-UX). --HG-- branch : HEAD --- diff --git a/configure.in b/configure.in index 1fcf7da11a..8fb53571d3 100644 --- a/configure.in +++ b/configure.in @@ -15,7 +15,7 @@ AC_C_INLINE 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 @@ dnl * after -lsocket and -lnsl tests, inet_aton() may be in them 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 diff --git a/src/lib/compat.c b/src/lib/compat.c index 29cfa494d3..57e24b6524 100644 --- a/src/lib/compat.c +++ b/src/lib/compat.c @@ -17,6 +17,9 @@ #include #include #include +#ifdef HAVE_INTTYPES_H +# include /* for strtoimax() and strtoumax() */ +#endif #ifndef INADDR_NONE # define INADDR_NONE INADDR_BROADCAST @@ -201,7 +204,9 @@ char *my_basename(char *path) #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 @@ unsigned long long int my_strtoull(const char *nptr, char **endptr, int base) #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 diff --git a/src/lib/compat.h b/src/lib/compat.h index 1e76582679..960d1a18a7 100644 --- a/src/lib/compat.h +++ b/src/lib/compat.h @@ -188,6 +188,10 @@ char *my_basename(char *path); # 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 */