# HG changeset patch # User Jim Meyering # Date 998809387 0 # Node ID 91de048953af9a669542d20b5139def789792d58 # Parent 2dbecdbe9da5291643e82f4dc45944a41f7a6810 *** empty log message *** diff --git a/lib/ChangeLog b/lib/ChangeLog --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,13 @@ +2001-08-26 Jim Meyering + + * xstrtoimax.c: New file. + + * strtoumax.c: New file. Simply include "strtoumax.c". + * strtoimax.c: New file. Likewise, but first define STRTOUXMAX_SIGNED. + + * strtoumax.c: Factor to work both for unsigned and signed types, ... + * strtouxmax.c: ... then renamed to this. + 2001-08-13 Paul Eggert * Makefile.am (unlocked-io.h): Do not append "_unlocked" twice. diff --git a/lib/xstrtoimax.c b/lib/xstrtoimax.c new file mode 100644 --- /dev/null +++ b/lib/xstrtoimax.c @@ -0,0 +1,31 @@ +/* xstrtoimax.c -- A more useful interface to strtoimax. + Copyright 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* Cloned by Jim Meyering. */ + +#if HAVE_CONFIG_H +# include +#endif + +#if HAVE_INTTYPES_H +# include +#endif + +#define __strtol strtoimax +#define __strtol_t intmax_t +#define __xstrtol xstrtoimax +#include "xstrtol.c" diff --git a/m4/xstrtoimax.m4 b/m4/xstrtoimax.m4 new file mode 100644 --- /dev/null +++ b/m4/xstrtoimax.m4 @@ -0,0 +1,42 @@ +#serial 1 + +# autoconf tests required for use of xstrtoimax.c + +AC_DEFUN([jm_AC_PREREQ_XSTRTOIMAX], +[ + AC_REQUIRE([jm_AC_TYPE_INTMAX_T]) + AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([jm_AC_TYPE_LONG_LONG]) + AC_CHECK_DECLS([strtol, strtoll]) + AC_CHECK_HEADERS(limits.h stdlib.h) + + AC_CACHE_CHECK([whether defines strtoimax as a macro], + jm_cv_func_strtoimax_macro, + AC_EGREP_CPP([inttypes_h_defines_strtoimax], [#include +#ifdef strtoimax + inttypes_h_defines_strtoimax +#endif], + jm_cv_func_strtoimax_macro=yes, + jm_cv_func_strtoimax_macro=no)) + + if test "$jm_cv_func_strtoimax_macro" != yes; then + AC_REPLACE_FUNCS(strtoimax) + fi + + dnl We don't need (and can't compile) the replacement strtoll + dnl unless the type `long long' exists. + dnl Also, only the replacement strtoimax invokes strtoll, + dnl so we need the replacement strtoll only if strtoimax does not exist. + case "$ac_cv_type_long_long,$jm_cv_func_strtoimax_macro,$ac_cv_func_strtoimax" in + yes,no,no) + AC_REPLACE_FUNCS(strtoll strtol) + ;; + esac + + case "$jm_cv_func_strtoimax_macro,$ac_cv_func_strtoimax" in + no,no) + AC_REPLACE_FUNCS(strtoul strtol) + ;; + esac + +])