Fix CFLAGS/LDFLAGS syntax
[platform/upstream/lrzsz.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 #undef __P
17 #if defined (__STDC__) && __STDC__
18 #define __P(x) x
19 #else
20 #define __P(x) ()
21 #endif
22
23 enum strtol_error
24   {
25     LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW
26   };
27 typedef enum strtol_error strtol_error;
28
29 strtol_error
30   __xstrtol __P ((const char *s, char **ptr, int base,
31                   __unsigned long int *val, const char *valid_suffixes));
32
33 #define _STRTOL_ERROR(exit_code, str, argument_type_string, err)        \
34   do                                                                    \
35     {                                                                   \
36       switch ((err))                                                    \
37         {                                                               \
38         case LONGINT_OK:                                                \
39           abort ();                                                     \
40                                                                         \
41         case LONGINT_INVALID:                                           \
42           error ((exit_code), 0, "invalid %s `%s'",                     \
43                  (argument_type_string), (str));                        \
44           break;                                                        \
45                                                                         \
46         case LONGINT_INVALID_SUFFIX_CHAR:                               \
47           error ((exit_code), 0, "invalid character following %s `%s'", \
48                  (argument_type_string), (str));                        \
49           break;                                                        \
50                                                                         \
51         case LONGINT_OVERFLOW:                                          \
52           /* FIXME: make this message dependent on STRING_TO_UNSIGNED */\
53           error ((exit_code), 0, "%s `%s' larger than maximum long int",\
54                  (argument_type_string), (str));                        \
55           break;                                                        \
56         }                                                               \
57     }                                                                   \
58   while (0)
59
60 #define STRTOL_FATAL_ERROR(str, argument_type_string, err)              \
61   _STRTOL_ERROR (2, str, argument_type_string, err)
62
63 #define STRTOL_FAIL_WARN(str, argument_type_string, err)                \
64   _STRTOL_ERROR (0, str, argument_type_string, err)
65
66 #endif /* _xstrtol_h_ */