]> Dogcows Code - chaz/tar/blob - lib/xstrtol.h
Initial revision
[chaz/tar] / lib / xstrtol.h
1 #ifndef XSTRTOL_H_
2 # define XSTRTOL_H_ 1
3
4 # if HAVE_INTTYPES_H
5 # include <inttypes.h> /* for uintmax_t */
6 # endif
7
8 # ifndef PARAMS
9 # if defined PROTOTYPES || (defined __STDC__ && __STDC__)
10 # define PARAMS(Args) Args
11 # else
12 # define PARAMS(Args) ()
13 # endif
14 # endif
15
16 # ifndef _STRTOL_ERROR
17 enum strtol_error
18 {
19 LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW
20 };
21 typedef enum strtol_error strtol_error;
22 # endif
23
24 # define _DECLARE_XSTRTOL(name, type) \
25 strtol_error \
26 name PARAMS ((const char *s, char **ptr, int base, \
27 type *val, const char *valid_suffixes));
28 _DECLARE_XSTRTOL (xstrtol, long int)
29 _DECLARE_XSTRTOL (xstrtoul, unsigned long int)
30 _DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
31
32 # define _STRTOL_ERROR(Exit_code, 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 ((Exit_code), 0, "invalid %s `%s'", \
42 (Argument_type_string), (Str)); \
43 break; \
44 \
45 case LONGINT_INVALID_SUFFIX_CHAR: \
46 error ((Exit_code), 0, "invalid character following %s `%s'", \
47 (Argument_type_string), (Str)); \
48 break; \
49 \
50 case LONGINT_OVERFLOW: \
51 error ((Exit_code), 0, "%s `%s' too large", \
52 (Argument_type_string), (Str)); \
53 break; \
54 } \
55 } \
56 while (0)
57
58 # define STRTOL_FATAL_ERROR(Str, Argument_type_string, Err) \
59 _STRTOL_ERROR (2, Str, Argument_type_string, Err)
60
61 # define STRTOL_FAIL_WARN(Str, Argument_type_string, Err) \
62 _STRTOL_ERROR (0, Str, Argument_type_string, Err)
63
64 #endif /* not XSTRTOL_H_ */
This page took 0.044994 seconds and 5 git commands to generate.