diff lib/xstrtol.h @ 9143:4290c9101f09

* NEWS: In xstrtol, remove STRTOL_FATAL_ERROR and add xstrtol_fatal. * lib/xstrtol.h: Don't include exitfail.h; that's now internal to xstrtol.c. Include getopt.h, since xstrtol_fatal's signature depends on it. (xstrtol_error): Remove. (xstrtol_fatal): New decl, replacing the functionality of xstrtol_error but with a different signature. (ATTRIBUTE_NORETURN, __attribute__): New macros. * lib/xstrtol-error.c: Include exitfail.h. (xstrtol_fatal): New function, with a different signature from the old xstrtol_error, so that the caller need not worry about passing in an exit status, or about storage management of the option argument. (xstrtol_error): Now a static function. Redo signature to implement xstrtol_fatal. Output the correct number of hyphens in front of the option so that the caller need not worry about storage management. (N_): New macro. (_): Remove; not used now. * modules/xstrtol: Depend on getopt. * tests/test-xstrtol.c (main): Use new xstrtol_error function instead of old STRTOL_FATAL_ERROR macro. * tests/test-xstrtol.sh (t-xstrtol.xo): Adjust to match new behavior of test program.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 10 Aug 2007 19:02:31 +0000
parents 2f9763090486
children bbbbbf4cd1c5
line wrap: on
line diff
--- a/lib/xstrtol.h
+++ b/lib/xstrtol.h
@@ -20,8 +20,7 @@
 #ifndef XSTRTOL_H_
 # define XSTRTOL_H_ 1
 
-# include "exitfail.h"
-
+# include <getopt.h>
 # include <inttypes.h>
 
 # ifndef _STRTOL_ERROR
@@ -48,16 +47,33 @@
 _DECLARE_XSTRTOL (xstrtoimax, intmax_t)
 _DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
 
-/* Report an error for an out-of-range integer argument.
-   EXIT_CODE is the exit code (0 for a non-fatal error).
-   OPTION is the option that takes the argument
-    (usually starting with one or two minus signs).
-   ARG is the option's argument.
-   ERR is the error code returned by one of the xstrto* functions.  */
-void xstrtol_error (int exit_code, char const *option, char const *arg,
-		    strtol_error err);
+#ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+#  define __attribute__(x)
+# endif
+#endif
+
+#ifndef ATTRIBUTE_NORETURN
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif
+
+/* Report an error for an invalid integer in an option argument.
+
+   ERR is the error code returned by one of the xstrto* functions.
 
-# define STRTOL_FATAL_ERROR(Option, Arg, Err)				\
-  xstrtol_error (exit_failure, Option, Arg, Err)
+   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.  */
+
+void xstrtol_fatal (enum strtol_error,
+		    int, char, struct option const *,
+		    char const *) ATTRIBUTE_NORETURN;
 
 #endif /* not XSTRTOL_H_ */