.
[gnulib.git] / lib / xstrtol.h
1 #ifndef _xstrtol_h_
2 #define _xstrtol_h_ 1
3
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
15
16 #if defined (__STDC__) && __STDC__
17 #define __P(x) x
18 #else
19 #define __P(x) ()
20 #endif
21
22 enum strtol_error
23   {
24     LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW
25   };
26 typedef enum strtol_error strtol_error;
27
28 strtol_error
29   __xstrtol __P ((const char *s, char **ptr, int base,
30                   __unsigned long int *val, int allow_bkm_suffix));
31
32 #define STRTOL_FATAL_ERROR(str, argument_type_string, err)              \
33   do                                                                    \
34     {                                                                   \
35       switch ((err))                                                    \
36         {                                                               \
37         case LONGINT_OK:                                                \
38           abort ();                                                     \
39                                                                         \
40         case LONGINT_INVALID:                                           \
41           error (2, 0, "invalid %s `%s'", (argument_type_string), (str));\
42           break;                                                        \
43                                                                         \
44         case LONGINT_INVALID_SUFFIX_CHAR:                               \
45           error (2, 0, "invalid character following %s `%s'",           \
46                  (argument_type_string), (str));                        \
47           break;                                                        \
48                                                                         \
49         case LONGINT_OVERFLOW:                                          \
50           error (2, 0, "%s `%s' larger than maximum long int",          \
51                  (argument_type_string), (str));                        \
52           break;                                                        \
53         }                                                               \
54     }                                                                   \
55   while (0)
56
57 #endif /* _xstrtol_h_ */