A function returning 'long long' cannot be correctly used on 32-bit systems without a declaration. POSIX specifies that strtoll() be declared in <stdlib.h>. So be it. I'm applying this.
2008-10-19 Bruno Haible <[EMAIL PROTECTED]> Add strtoll() declaration to <stdlib.h>. * lib/stdlib.in.h (strtoll): New declaration. * m4/strtoll.m4 (gl_FUNC_STRTOLL): Require gl_STDLIB_H_DEFAULTS. Set HAVE_STRTOLL. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_STRTOLL, HAVE_STRTOLL. * modules/strtoll (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. * modules/stdlib (Makefile.am): Substitute GNULIB_STRTOLL, HAVE_STRTOLL. --- lib/stdlib.in.h.orig 2008-10-19 18:37:27.000000000 +0200 +++ lib/stdlib.in.h 2008-10-19 18:33:03.000000000 +0200 @@ -257,6 +257,27 @@ #endif +#if @GNULIB_STRTOLL@ +# if [EMAIL PROTECTED]@ +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow or underflow, the return value is LLONG_MAX or LLONG_MIN, + respectively, and errno is set to ERANGE. */ +extern long long strtoll (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# define strtoll(s,e,b) \ + (GL_LINK_WARNING ("strtoll is unportable - " \ + "use gnulib module strtoll for portability"), \ + strtoll (s, e, b)) +#endif + + #ifdef __cplusplus } #endif --- m4/stdlib_h.m4.orig 2008-10-19 18:37:27.000000000 +0200 +++ m4/stdlib_h.m4 2008-10-19 18:35:03.000000000 +0200 @@ -1,4 +1,4 @@ -# stdlib_h.m4 serial 8 +# stdlib_h.m4 serial 9 dnl Copyright (C) 2007, 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -30,6 +30,7 @@ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) + GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX]) @@ -40,6 +41,7 @@ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) + HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNSETENV=1; AC_SUBST([HAVE_UNSETENV]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) --- m4/strtoll.m4.orig 2008-10-19 18:37:27.000000000 +0200 +++ m4/strtoll.m4 2008-10-19 18:36:00.000000000 +0200 @@ -1,17 +1,19 @@ -# strtoll.m4 serial 4 -dnl Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc. +# strtoll.m4 serial 5 +dnl Copyright (C) 2002, 2004, 2006, 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOLL], [ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl We don't need (and can't compile) the replacement strtoll dnl unless the type 'long long int' exists. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test "$ac_cv_type_long_long_int" = yes; then AC_REPLACE_FUNCS(strtoll) if test $ac_cv_func_strtoll = no; then + HAVE_STRTOLL=0 gl_PREREQ_STRTOLL fi fi --- modules/stdlib.orig 2008-10-19 18:37:27.000000000 +0200 +++ modules/stdlib 2008-10-19 18:34:33.000000000 +0200 @@ -35,6 +35,7 @@ -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \ -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \ + -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \ -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ @@ -44,6 +45,7 @@ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ --- modules/strtoll.orig 2008-10-19 18:37:28.000000000 +0200 +++ modules/strtoll 2008-10-19 18:36:31.000000000 +0200 @@ -7,10 +7,12 @@ m4/strtoll.m4 Depends-on: +stdlib strtol configure.ac: gl_FUNC_STRTOLL +gl_STDLIB_MODULE_INDICATOR([strtoll]) Makefile.am: