home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / textutils-1.19-src.tgz / tar.out / fsf / textutils / lib / xstrtol.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  67 lines

  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_ */
  67.