.
[coreutils.git] / lib / xstrtol.h
blob3c16c7e01cf4bb663a33131178e5268fe00aa076
1 #ifndef XSTRTOL_H_
2 # define XSTRTOL_H_ 1
4 # if STRING_TO_UNSIGNED
5 # define __xstrtol xstrtoul
6 # define __strtol strtoul
7 # define __unsigned unsigned
8 # define __ZLONG_MAX ULONG_MAX
9 # else
10 # define __xstrtol xstrtol
11 # define __strtol strtol
12 # define __unsigned /* empty */
13 # define __ZLONG_MAX LONG_MAX
14 # endif
16 # ifndef PARAMS
17 # if defined PROTOTYPES || (defined __STDC__ && __STDC__)
18 # define PARAMS(Args) Args
19 # else
20 # define PARAMS(Args) ()
21 # endif
22 # endif
24 # ifndef _STRTOL_ERROR
25 enum strtol_error
27 LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW
29 typedef enum strtol_error strtol_error;
30 # endif
32 strtol_error
33 __xstrtol PARAMS ((const char *s, char **ptr, int base,
34 __unsigned long int *val, const char *valid_suffixes));
36 # undef _STRTOL_ERROR
37 # define _STRTOL_ERROR(Exit_code, Str, Argument_type_string, Err) \
38 do \
39 { \
40 switch ((Err)) \
41 { \
42 case LONGINT_OK: \
43 abort (); \
45 case LONGINT_INVALID: \
46 error ((Exit_code), 0, "invalid %s `%s'", \
47 (Argument_type_string), (Str)); \
48 break; \
50 case LONGINT_INVALID_SUFFIX_CHAR: \
51 error ((Exit_code), 0, "invalid character following %s `%s'", \
52 (Argument_type_string), (Str)); \
53 break; \
55 case LONGINT_OVERFLOW: \
56 /* FIXME: make this message dependent on STRING_TO_UNSIGNED */\
57 error ((Exit_code), 0, "%s `%s' larger than maximum long int",\
58 (Argument_type_string), (Str)); \
59 break; \
60 } \
61 } \
62 while (0)
64 # define STRTOL_FATAL_ERROR(Str, Argument_type_string, Err) \
65 _STRTOL_ERROR (2, Str, Argument_type_string, Err)
67 # define STRTOL_FAIL_WARN(Str, Argument_type_string, Err) \
68 _STRTOL_ERROR (0, Str, Argument_type_string, Err)
70 #endif /* not XSTRTOL_H_ */