diff options
author | Jim Meyering <jim@meyering.net> | 1994-12-20 04:17:23 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1994-12-20 04:17:23 +0000 |
commit | 3205d087e2d0a7b0838a51f88c6337fcf7c5779a (patch) | |
tree | e0d21b5623491d91e6e47a064e317a3037bd4dea /lib/xstrtol.h | |
parent | a09358fc2c238755031886d7c2d60688f3d9b293 (diff) | |
download | coreutils-3205d087e2d0a7b0838a51f88c6337fcf7c5779a.tar.xz |
.
Diffstat (limited to 'lib/xstrtol.h')
-rw-r--r-- | lib/xstrtol.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/xstrtol.h b/lib/xstrtol.h new file mode 100644 index 000000000..45043d01d --- /dev/null +++ b/lib/xstrtol.h @@ -0,0 +1,57 @@ +#ifndef _xstrtol_h_ +#define _xstrtol_h_ 1 + +#if STRING_TO_UNSIGNED +# define __xstrtol xstrtoul +# define __strtol strtoul +# define __unsigned unsigned +# define __ZLONG_MAX ULONG_MAX +#else +# define __xstrtol xstrtol +# define __strtol strtol +# define __unsigned /* empty */ +# define __ZLONG_MAX LONG_MAX +#endif + +#if defined (__STDC__) && __STDC__ +#define __P(x) x +#else +#define __P(x) () +#endif + +enum strtol_error + { + LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW + }; +typedef enum strtol_error strtol_error; + +strtol_error + __xstrtol __P ((const char *s, char **ptr, int base, + __unsigned long int *val, int allow_bkm_suffix)); + +#define STRTOL_FATAL_ERROR(str, argument_type_string, err) \ + do \ + { \ + switch ((err)) \ + { \ + case LONGINT_OK: \ + abort (); \ + \ + case LONGINT_INVALID: \ + error (2, 0, "invalid %s `%s'", (argument_type_string), (str));\ + break; \ + \ + case LONGINT_INVALID_SUFFIX_CHAR: \ + error (2, 0, "invalid character following %s `%s'", \ + (argument_type_string), (str)); \ + break; \ + \ + case LONGINT_OVERFLOW: \ + error (2, 0, "%s `%s' larger than maximum long int", \ + (argument_type_string), (str)); \ + break; \ + } \ + } \ + while (0) + +#endif /* _xstrtol_h_ */ |