Mercurial > hg > octave-lojdl > gnulib-hg
changeset 12814:fcd269d69e88
xstrtoll: new module
* modules/xstrtoll: New file.
* MODULES.html.sh (Numeric conversion functions): Add xstrtoll.
* lib/xstrtol.h [HAVE_LONG_LONG_INT]: Declare xstrtoll and xstrtoull.
* lib/xstrtoll.c, lib/xstrtoull.c: New files.
./configure fails if you use this module and lack "long long".
* modules/xstrtoll-tests: New module.
* tests/test-xstrtoll.c, tests/test-xstrtoull.c: New files.
* tests/test-xstrtoll.sh: Like test-xstrtol.c, but use the
new init.sh-based test framework.
author | Jim Meyering <meyering@redhat.com> |
---|---|
date | Sat, 23 Jan 2010 11:52:44 +0100 |
parents | 83dd91128293 |
children | 3782e680ac8b |
files | ChangeLog MODULES.html.sh lib/xstrtol.h lib/xstrtoll.c lib/xstrtoull.c modules/xstrtoll modules/xstrtoll-tests tests/test-xstrtoll.c tests/test-xstrtoll.sh tests/test-xstrtoull.c |
diffstat | 10 files changed, 153 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2010-01-23 Jim Meyering <meyering@redhat.com> + + xstrtoll: new module + * modules/xstrtoll: New file. + * MODULES.html.sh (Numeric conversion functions): Add xstrtoll. + * lib/xstrtol.h [HAVE_LONG_LONG_INT]: Declare xstrtoll and xstrtoull. + * lib/xstrtoll.c, lib/xstrtoull.c: New files. + ./configure fails if you use this module and lack "long long". + * modules/xstrtoll-tests: New module. + * tests/test-xstrtoll.c, tests/test-xstrtoull.c: New files. + * tests/test-xstrtoll.sh: Like test-xstrtol.c, but use the + new init.sh-based test framework. + 2010-01-24 Bruno Haible <bruno@clisp.org> Tests for module 'yn'.
--- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1820,6 +1820,7 @@ func_module c-strtold func_module xstrtod func_module xstrtol + func_module xstrtoll func_module xstrtold func_end_table
--- a/lib/xstrtol.h +++ b/lib/xstrtol.h @@ -46,6 +46,11 @@ _DECLARE_XSTRTOL (xstrtoimax, intmax_t) _DECLARE_XSTRTOL (xstrtoumax, uintmax_t) +#if HAVE_LONG_LONG_INT +_DECLARE_XSTRTOL (xstrtoll, long long int) +_DECLARE_XSTRTOL (xstrtoull, unsigned long long int) +#endif + #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) # define __attribute__(x)
new file mode 100644 --- /dev/null +++ b/lib/xstrtoll.c @@ -0,0 +1,6 @@ +#define __strtol strtoll +#define __strtol_t long long int +#define __xstrtol xstrtoll +#define STRTOL_T_MINIMUM LONG_LONG_MIN +#define STRTOL_T_MAXIMUM LONG_LONG_MAX +#include "xstrtol.c"
new file mode 100644 --- /dev/null +++ b/lib/xstrtoull.c @@ -0,0 +1,6 @@ +#define __strtol strtoull +#define __strtol_t unsigned long long int +#define __xstrtol xstrtoull +#define STRTOL_T_MINIMUM 0 +#define STRTOL_T_MAXIMUM ULONG_LONG_MAX +#include "xstrtol.c"
new file mode 100644 --- /dev/null +++ b/modules/xstrtoll @@ -0,0 +1,30 @@ +Description: +Convert string to 'long long' or 'unsigned long long', with error checking. + +Files: +lib/xstrtoll.c +lib/xstrtoull.c + +Depends-on: +strtoll +strtoull +xstrtol + +configure.ac: +AC_LIBOBJ([xstrtoll]) +AC_LIBOBJ([xstrtoull]) +AC_TYPE_LONG_LONG_INT +test $ac_cv_type_long_long_int = no \ + && AC_MSG_ERROR( + [you lack long long support; required by gnulib's xstrtoll module]) + +Makefile.am: + +Include: +"xstrtol.h" + +License: +GPL + +Maintainer: +Jim Meyering
new file mode 100644 --- /dev/null +++ b/modules/xstrtoll-tests @@ -0,0 +1,17 @@ +Files: +tests/init.sh +tests/test-xstrtol.c +tests/test-xstrtoll.c +tests/test-xstrtoull.c +tests/test-xstrtoll.sh + +Depends-on: +xstrtoll + +configure.ac: + +Makefile.am: +TESTS += test-xstrtoll.sh +check_PROGRAMS += test-xstrtoll test-xstrtoull +test_xstrtoll_LDADD = $(LDADD) $(LIBINTL) +test_xstrtoull_LDADD = $(LDADD) $(LIBINTL)
new file mode 100644 --- /dev/null +++ b/tests/test-xstrtoll.c @@ -0,0 +1,4 @@ +#define __xstrtol xstrtoll +#define __strtol_t long long int +#define __spec PRId64 +#include "test-xstrtol.c"
new file mode 100755 --- /dev/null +++ b/tests/test-xstrtoll.sh @@ -0,0 +1,67 @@ +#!/bin/sh +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ . + +too_big=99999999999999999999999999999999999999999999999999999999999999999999 +result=0 + +# test xstrtoll +test-xstrtoll 1 >> out 2>&1 || result=1 +test-xstrtoll -1 >> out 2>&1 || result=1 +test-xstrtoll 1k >> out 2>&1 || result=1 +test-xstrtoll ${too_big}h >> out 2>&1 && result=1 +test-xstrtoll $too_big >> out 2>&1 && result=1 +test-xstrtoll x >> out 2>&1 && result=1 +test-xstrtoll 9x >> out 2>&1 && result=1 +test-xstrtoll 010 >> out 2>&1 || result=1 +# suffix without integer is valid +test-xstrtoll MiB >> out 2>&1 || result=1 + +# test xstrtoull +test-xstrtoull 1 >> out 2>&1 || result=1 +test-xstrtoull -1 >> out 2>&1 && result=1 +test-xstrtoull 1k >> out 2>&1 || result=1 +test-xstrtoull ${too_big}h >> out 2>&1 && result=1 +test-xstrtoull $too_big >> out 2>&1 && result=1 +test-xstrtoull x >> out 2>&1 && result=1 +test-xstrtoull 9x >> out 2>&1 && result=1 +test-xstrtoull 010 >> out 2>&1 || result=1 +test-xstrtoull MiB >> out 2>&1 || result=1 + +# Find out how to remove carriage returns from output. Solaris /usr/ucb/tr +# does not understand '\r'. +if echo solaris | tr -d '\r' | grep solais > /dev/null; then + cr='\015' +else + cr='\r' +fi + +# normalize output +LC_ALL=C tr -d "$cr" < out > k +mv k out + +# compare expected output +cat > expected <<EOF +1->1 () +-1->-1 () +1k->1024 () +invalid suffix in X argument \`${too_big}h' +X argument \`$too_big' too large +invalid X argument \`x' +invalid suffix in X argument \`9x' +010->8 () +MiB->1048576 () +1->1 () +invalid X argument \`-1' +1k->1024 () +invalid suffix in X argument \`${too_big}h' +X argument \`$too_big' too large +invalid X argument \`x' +invalid suffix in X argument \`9x' +010->8 () +MiB->1048576 () +EOF + +compare expected out || result=1 + +Exit $result