The xstrtol module provides a xstrtol_fatal function which uses other modules suitable mostly for command line handling (e.g. gettext, getopt), and that are completely unused when using only xstrto* functions. Furthermore, xstrtol_fatal is used only in the xstrtol-tests (within gnulib itself).
As solution, move the xstrtol_fatal to a new xstrtol-error module, making xstrtol-tests depend on it. Since the prototype of xstrtol_fatal is automatically provided by xstrtol.h, it is very difficult to know whether anyone is actually using it, so add a note about this in NEWS. * lib/xstrtol.h: Stop including <getopt.h>. (xstrtol_fatal): Move ... * lib/xstrtol-error.h: ... here. New file. * modules/xstrtol (Files): Remove lib/xstrtol-error.c. (Depends-on): Remove exitfail, error, getopt-gnu, and gettext-h. (Makefile.am): Remove xstrtol-error.c from lib_SOURCES. * lib/xstrtol-error.c: Include xstrtol-error.h instead of xstrtol.h. * tests/test-xstrtol.c: Likewise. * modules/xstrtol-error: New file. * modules/xstrtol-tests (Depends-on): Add xstrtol-error. * MODULES.html.sh: Add xstrtol-error. * NEWS: Document the change. --- ChangeLog | 16 +++++++++++++++ MODULES.html.sh | 1 + NEWS | 6 ++++++ lib/xstrtol-error.c | 2 +- lib/xstrtol-error.h | 45 +++++++++++++++++++++++++++++++++++++++++++ lib/xstrtol.h | 20 ------------------- modules/xstrtol | 7 +------ modules/xstrtol-error | 27 ++++++++++++++++++++++++++ modules/xstrtol-tests | 1 + tests/test-xstrtol.c | 2 +- 10 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 lib/xstrtol-error.h create mode 100644 modules/xstrtol-error diff --git a/ChangeLog b/ChangeLog index cb3ffc7e8..7709bbdec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2019-12-05 Pino Toscano <ptosc...@redhat.com> + + Move xstrtol_fatal to a new xstrtol-error module. + * lib/xstrtol.h: Stop including <getopt.h>. + (xstrtol_fatal): Move ... + * lib/xstrtol-error.h: ... here. New file. + * modules/xstrtol (Files): Remove lib/xstrtol-error.c. + (Depends-on): Remove exitfail, error, getopt-gnu, and gettext-h. + (Makefile.am): Remove xstrtol-error.c from lib_SOURCES. + * lib/xstrtol-error.c: Include xstrtol-error.h instead of xstrtol.h. + * tests/test-xstrtol.c: Likewise. + * modules/xstrtol-error: New file. + * modules/xstrtol-tests (Depends-on): Add xstrtol-error. + * MODULES.html.sh: Add xstrtol-error. + * NEWS: Document the change. + 2019-12-04 Bruno Haible <br...@clisp.org> Fix compilation errors in C++ mode with xlclang++ on AIX. diff --git a/MODULES.html.sh b/MODULES.html.sh index 107f16cc2..2ed3bf905 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1861,6 +1861,7 @@ func_all_modules () func_module c-strtold func_module xstrtod func_module xstrtol + func_module xstrtol-error func_module xstrtoll func_module xstrtold func_end_table diff --git a/NEWS b/NEWS index 2655d7fc9..0972d951b 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,12 @@ Important general notes Date Modules Changes +2019-12-05 userspec The xstrtol_fatal is moved away from the xstrtol + xstrtoimax module to a new xstrtol-error module. Because of + xstrtol this, using xstrtol or any of the modules using it + xstrtoll does not pull automatically the exitfail, error, + xstrtoumax getopt-gnu, and gettext-h modules. + 2019-03-16 fatal-signal The function that you pass to at_fatal_signal now takes the signal as argument. diff --git a/lib/xstrtol-error.c b/lib/xstrtol-error.c index a0d10c285..386d22b2d 100644 --- a/lib/xstrtol-error.c +++ b/lib/xstrtol-error.c @@ -17,7 +17,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> -#include "xstrtol.h" +#include "xstrtol-error.h" #include <stdlib.h> diff --git a/lib/xstrtol-error.h b/lib/xstrtol-error.h new file mode 100644 index 000000000..a9cd940a4 --- /dev/null +++ b/lib/xstrtol-error.h @@ -0,0 +1,45 @@ +/* Error reporting interface for xstrto* functions. + + Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2019 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 3 of the License, 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, see <https://www.gnu.org/licenses/>. */ + +#ifndef XSTRTOL_ERROR_H_ +# define XSTRTOL_ERROR_H_ 1 + +# include "xstrtol.h" + +# include <getopt.h> + +/* Report an error for an invalid integer in an option argument. + + ERR is the error code returned by one of the xstrto* functions. + + Use OPT_IDX to decide whether to print the short option string "C" + or "-C" or a long option string derived from LONG_OPTION. OPT_IDX + is -2 if the short option "C" was used, without any leading "-"; it + is -1 if the short option "-C" was used; otherwise it is an index + into LONG_OPTIONS, which should have a name preceded by two '-' + characters. + + ARG is the option-argument containing the integer. + + After reporting an error, exit with a failure status. */ + +_Noreturn void xstrtol_fatal (enum strtol_error, + int, char, struct option const *, + char const *); + +#endif /* not XSTRTOL_ERROR_H_ */ diff --git a/lib/xstrtol.h b/lib/xstrtol.h index fff320d50..d888120e6 100644 --- a/lib/xstrtol.h +++ b/lib/xstrtol.h @@ -19,7 +19,6 @@ #ifndef XSTRTOL_H_ # define XSTRTOL_H_ 1 -# include <getopt.h> # include <inttypes.h> # ifndef _STRTOL_ERROR @@ -51,23 +50,4 @@ _DECLARE_XSTRTOL (xstrtoll, long long int) _DECLARE_XSTRTOL (xstrtoull, unsigned long long int) #endif -/* Report an error for an invalid integer in an option argument. - - ERR is the error code returned by one of the xstrto* functions. - - Use OPT_IDX to decide whether to print the short option string "C" - or "-C" or a long option string derived from LONG_OPTION. OPT_IDX - is -2 if the short option "C" was used, without any leading "-"; it - is -1 if the short option "-C" was used; otherwise it is an index - into LONG_OPTIONS, which should have a name preceded by two '-' - characters. - - ARG is the option-argument containing the integer. - - After reporting an error, exit with a failure status. */ - -_Noreturn void xstrtol_fatal (enum strtol_error, - int, char, struct option const *, - char const *); - #endif /* not XSTRTOL_H_ */ diff --git a/modules/xstrtol b/modules/xstrtol index 26240ecc9..a765f9745 100644 --- a/modules/xstrtol +++ b/modules/xstrtol @@ -5,22 +5,17 @@ Files: lib/xstrtol.h lib/xstrtol.c lib/xstrtoul.c -lib/xstrtol-error.c m4/xstrtol.m4 Depends-on: assure -exitfail -error -getopt-gnu -gettext-h inttypes-incomplete configure.ac: gl_XSTRTOL Makefile.am: -lib_SOURCES += xstrtol.c xstrtoul.c xstrtol-error.c +lib_SOURCES += xstrtol.c xstrtoul.c Include: "xstrtol.h" diff --git a/modules/xstrtol-error b/modules/xstrtol-error new file mode 100644 index 000000000..9c3da2a5a --- /dev/null +++ b/modules/xstrtol-error @@ -0,0 +1,27 @@ +Description: +Error reporting function for xstrto* functions. + +Files: +lib/xstrtol-error.c +lib/xstrtol-error.h + +Depends-on: +xstrtol +error +exitfail +getopt-gnu +gettext-h + +configure.ac: + +Makefile.am: +lib_SOURCES += xstrtol-error.c + +Include: +"xstrtol-error.h" + +License: +GPL + +Maintainer: +Jim Meyering diff --git a/modules/xstrtol-tests b/modules/xstrtol-tests index da11c1960..1786873d0 100644 --- a/modules/xstrtol-tests +++ b/modules/xstrtol-tests @@ -6,6 +6,7 @@ tests/test-xstrtol.sh Depends-on: inttypes test-framework-sh +xstrtol-error configure.ac: diff --git a/tests/test-xstrtol.c b/tests/test-xstrtol.c index 7f9df2e3f..ffac9bdea 100644 --- a/tests/test-xstrtol.c +++ b/tests/test-xstrtol.c @@ -20,7 +20,7 @@ #include <stdlib.h> #include <stdio.h> -#include "xstrtol.h" +#include "xstrtol-error.h" #include "error.h" #ifndef __xstrtol -- 2.21.0