1 /* A more useful interface to strtol. 2 3 Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2020 Free Software 4 Foundation, Inc. 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 18 19 #ifndef XSTRTOL_H_ 20 # define XSTRTOL_H_ 1 21 22 # include <inttypes.h> 23 24 # ifndef _STRTOL_ERROR 25 enum strtol_error 26 { 27 LONGINT_OK = 0, 28 29 /* These two values can be ORed together, to indicate that both 30 errors occurred. */ 31 LONGINT_OVERFLOW = 1, 32 LONGINT_INVALID_SUFFIX_CHAR = 2, 33 34 LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR 35 | LONGINT_OVERFLOW), 36 LONGINT_INVALID = 4 37 }; 38 typedef enum strtol_error strtol_error; 39 # endif 40 41 # define _DECLARE_XSTRTOL(name, type) \ 42 strtol_error name (const char *, char **, int, type *, const char *); 43 _DECLARE_XSTRTOL (xstrtol, long int) 44 _DECLARE_XSTRTOL (xstrtoul, unsigned long int) 45 _DECLARE_XSTRTOL (xstrtoll, long long int) 46 _DECLARE_XSTRTOL (xstrtoull, unsigned long long int) 47 _DECLARE_XSTRTOL (xstrtoimax, intmax_t) 48 _DECLARE_XSTRTOL (xstrtoumax, uintmax_t) 49 50 #endif /* not XSTRTOL_H_ */ 51