/* Convert string representation of a number into an integer value. Copyright (C) 1991-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #include #include #include #ifndef UNSIGNED # define UNSIGNED 0 # define INT LONG int #else # define INT unsigned LONG int #endif #if UNSIGNED # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstoull # define __strtol_l __wcstoull_l # else # define strtol wcstoul # define __strtol_l __wcstoul_l # endif # else # ifdef QUAD # define strtol strtoull # define __strtol_l __strtoull_l # else # define strtol strtoul # define __strtol_l __strtoul_l # endif # endif #else # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstoll # define __strtol_l __wcstoll_l # else # define strtol wcstol # define __strtol_l __wcstol_l # endif # else # ifdef QUAD # define strtol strtoll # define __strtol_l __strtoll_l # endif # endif #endif /* If QUAD is defined, we are defining `strtoll' or `strtoull', operating on `long long int's. */ #ifdef QUAD # define LONG long long #else # define LONG long #endif #ifdef USE_WIDE_CHAR # define STRING_TYPE wchar_t #else # define STRING_TYPE char #endif #define INTERNAL(X) INTERNAL1(X) #define INTERNAL1(X) __##X##_internal #define SYM__(X) SYM__1 (X) #define SYM__1(X) __ ## X #define __strtol SYM__ (strtol) extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int, int, locale_t); INT INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base, int group) { return INTERNAL (__strtol_l) (nptr, endptr, base, group, _NL_CURRENT_LOCALE); } libc_hidden_def (INTERNAL (strtol)) INT __strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base) { return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE); } weak_alias (__strtol, strtol) libc_hidden_weak (strtol)