1131554Stjr#ifndef XSTRTOL_H_ 2131554Stjr# define XSTRTOL_H_ 1 3131554Stjr 4131554Stjr# if HAVE_INTTYPES_H 5131554Stjr# include <inttypes.h> /* for uintmax_t */ 6131554Stjr# endif 7131554Stjr 8131554Stjr# ifndef PARAMS 9131554Stjr# if defined PROTOTYPES || (defined __STDC__ && __STDC__) 10131554Stjr# define PARAMS(Args) Args 11131554Stjr# else 12131554Stjr# define PARAMS(Args) () 13131554Stjr# endif 14131554Stjr# endif 15131554Stjr 16131554Stjr# ifndef _STRTOL_ERROR 17131554Stjrenum strtol_error 18131554Stjr { 19131554Stjr LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW 20131554Stjr }; 21131554Stjrtypedef enum strtol_error strtol_error; 22131554Stjr# endif 23131554Stjr 24131554Stjr# define _DECLARE_XSTRTOL(name, type) \ 25131554Stjr strtol_error \ 26131554Stjr name PARAMS ((const char *s, char **ptr, int base, \ 27131554Stjr type *val, const char *valid_suffixes)); 28131554Stjr_DECLARE_XSTRTOL (xstrtol, long int) 29131554Stjr_DECLARE_XSTRTOL (xstrtoul, unsigned long int) 30131554Stjr_DECLARE_XSTRTOL (xstrtoumax, uintmax_t) 31131554Stjr 32131554Stjr# define _STRTOL_ERROR(Exit_code, Str, Argument_type_string, Err) \ 33131554Stjr do \ 34131554Stjr { \ 35131554Stjr switch ((Err)) \ 36131554Stjr { \ 37131554Stjr case LONGINT_OK: \ 38131554Stjr abort (); \ 39131554Stjr \ 40131554Stjr case LONGINT_INVALID: \ 41131554Stjr error ((Exit_code), 0, "invalid %s `%s'", \ 42131554Stjr (Argument_type_string), (Str)); \ 43131554Stjr break; \ 44131554Stjr \ 45131554Stjr case LONGINT_INVALID_SUFFIX_CHAR: \ 46131554Stjr error ((Exit_code), 0, "invalid character following %s `%s'", \ 47131554Stjr (Argument_type_string), (Str)); \ 48131554Stjr break; \ 49131554Stjr \ 50131554Stjr case LONGINT_OVERFLOW: \ 51131554Stjr error ((Exit_code), 0, "%s `%s' too large", \ 52131554Stjr (Argument_type_string), (Str)); \ 53131554Stjr break; \ 54131554Stjr } \ 55131554Stjr } \ 56131554Stjr while (0) 57131554Stjr 58131554Stjr# define STRTOL_FATAL_ERROR(Str, Argument_type_string, Err) \ 59131554Stjr _STRTOL_ERROR (2, Str, Argument_type_string, Err) 60131554Stjr 61131554Stjr# define STRTOL_FAIL_WARN(Str, Argument_type_string, Err) \ 62131554Stjr _STRTOL_ERROR (0, Str, Argument_type_string, Err) 63131554Stjr 64131554Stjr#endif /* not XSTRTOL_H_ */ 65