diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2009-12-23 14:52:49 +0200 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2009-12-23 14:52:49 +0200 |
commit | 7c62eb237f38846890a94622b7c7556340d8ae5a (patch) | |
tree | 03202a03fcc79be2936d1ab447e656071ec401a8 /misc/strtol.c | |
parent | 5741334a857a783b033c647223f206a7ca43cef3 (diff) | |
download | librpm-tizen-7c62eb237f38846890a94622b7c7556340d8ae5a.tar.gz librpm-tizen-7c62eb237f38846890a94622b7c7556340d8ae5a.tar.bz2 librpm-tizen-7c62eb237f38846890a94622b7c7556340d8ae5a.zip |
Remove replacements for C99 mandated functions
- rpm requires C99 compiler anyway, no point in carrying these around
Diffstat (limited to 'misc/strtol.c')
-rw-r--r-- | misc/strtol.c | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/misc/strtol.c b/misc/strtol.c deleted file mode 100644 index 633ed467b..000000000 --- a/misc/strtol.c +++ /dev/null @@ -1,296 +0,0 @@ -/* Copyright (C) 1991, 1992, 1994, 1995 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#ifdef _LIBC -# define USE_NUMBER_GROUPING -# define STDC_HEADERS -# define HAVE_LIMITS_H -#else -#include "system.h" -#endif - -#ifndef errno -extern int errno; -#endif - -#ifdef STDC_HEADERS -# include <stddef.h> -# include <stdlib.h> -#else -# ifndef NULL -# define NULL 0 -# endif -#endif - -#ifdef USE_NUMBER_GROUPING -# include "../locale/localeinfo.h" -#endif - -/* Nonzero if we are defining `strtoul' or `strtouq', operating on - unsigned integers. */ -#ifndef UNSIGNED -# define UNSIGNED 0 -# define INT LONG int -#else -# define strtol strtoul -# define INT unsigned LONG int -#endif - -/* If QUAD is defined, we are defining `strtoq' or `strtouq', - operating on `long long int's. */ -#ifdef QUAD -# if UNSIGNED -# define strtoul strtouq -# else -# define strtol strtoq -# endif -# define LONG long long -# undef LONG_MIN -# define LONG_MIN LONG_LONG_MIN -# undef LONG_MAX -# define LONG_MAX LONG_LONG_MAX -# undef ULONG_MAX -# define ULONG_MAX ULONG_LONG_MAX -# if __GNUC__ == 2 && __GNUC_MINOR__ < 7 - /* Work around gcc bug with using this constant. */ - static const unsigned long long int maxquad = ULONG_LONG_MAX; -# undef ULONG_MAX -# define ULONG_MAX maxquad -# endif -#else -# define LONG long -#endif - -#ifdef __STDC__ -# define INTERNAL(x) INTERNAL1(x) -# define INTERNAL1(x) __##x##_internal -#else -# define INTERNAL(x) __/**/x/**/_internal -#endif - -#ifdef USE_NUMBER_GROUPING -/* This file defines a function to check for correct grouping. */ -# include "grouping.h" -#endif - - -/* Convert NPTR to an `unsigned long int' or `long int' in base BASE. - If BASE is 0 the base is determined by the presence of a leading - zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. - If BASE is < 2 or > 36, it is reset to 10. - If ENDPTR is not NULL, a pointer to the character after the last - one converted is stored in *ENDPTR. */ - -INT -INTERNAL (strtol) (nptr, endptr, base, group) - const char *nptr; - char **endptr; - int base; - int group; -{ - int negative; - register unsigned LONG int cutoff; - register unsigned int cutlim; - register unsigned LONG int i; - register const char *s; - register unsigned char c; - const char *save, *end; - int overflow; - -#ifdef USE_NUMBER_GROUPING - /* The thousands character of the current locale. */ - wchar_t thousands; - /* The numeric grouping specification of the current locale, - in the format described in <locale.h>. */ - const char *grouping; - - if (group) - { - grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); - if (*grouping <= 0 || *grouping == CHAR_MAX) - grouping = NULL; - else - { - /* Figure out the thousands separator character. */ - if (mbtowc (&thousands, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP), - strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0) - thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP); - if (thousands == L'\0') - grouping = NULL; - } - } - else - grouping = NULL; -#endif - - if (base < 0 || base == 1 || base > 36) - base = 10; - - save = s = nptr; - - /* Skip white space. */ - while (isspace (*s)) - ++s; - if (*s == '\0') - goto noconv; - - /* Check for a sign. */ - if (*s == '-') - { - negative = 1; - ++s; - } - else if (*s == '+') - { - negative = 0; - ++s; - } - else - negative = 0; - - if (base == 16 && s[0] == '0' && toupper (s[1]) == 'X') - s += 2; - - /* If BASE is zero, figure it out ourselves. */ - if (base == 0) - if (*s == '0') - { - if (toupper (s[1]) == 'X') - { - s += 2; - base = 16; - } - else - base = 8; - } - else - base = 10; - - /* Save the pointer so we can check later if anything happened. */ - save = s; - -#ifdef USE_NUMBER_GROUPING - if (group) - { - /* Find the end of the digit string and check its grouping. */ - end = s; - for (c = *end; c != '\0'; c = *++end) - if (c != thousands && !isdigit (c) && - (!isalpha (c) || toupper (c) - 'A' + 10 >= base)) - break; - if (*s == thousands) - end = s; - else - end = correctly_grouped_prefix (s, end, thousands, grouping); - } - else -#endif - end = NULL; - - cutoff = ULONG_MAX / (unsigned LONG int) base; - cutlim = ULONG_MAX % (unsigned LONG int) base; - - overflow = 0; - i = 0; - for (c = *s; c != '\0'; c = *++s) - { - if (s == end) - break; - if (isdigit (c)) - c -= '0'; - else if (isalpha (c)) - c = toupper (c) - 'A' + 10; - else - break; - if (c >= base) - break; - /* Check for overflow. */ - if (i > cutoff || (i == cutoff && c > cutlim)) - overflow = 1; - else - { - i *= (unsigned LONG int) base; - i += c; - } - } - - /* Check if anything actually happened. */ - if (s == save) - goto noconv; - - /* Store in ENDPTR the address of one character - past the last character we converted. */ - if (endptr != NULL) - *endptr = (char *) s; - -#if !UNSIGNED - /* Check for a value that is within the range of - `unsigned LONG int', but outside the range of `LONG int'. */ - if (i > (negative ? - -(unsigned LONG int) LONG_MIN : (unsigned LONG int) LONG_MAX)) - overflow = 1; -#endif - - if (overflow) - { - errno = ERANGE; -#if UNSIGNED - return ULONG_MAX; -#else - return negative ? LONG_MIN : LONG_MAX; -#endif - } - - /* Return the result of the appropriate sign. */ - return (negative ? -i : i); - -noconv: - /* We must handle a special case here: the base is 0 or 16 and the - first two characters and '0' and 'x', but the rest are no - hexadecimal digits. This is no error case. We return 0 and - ENDPTR points to the `x`. */ - if (endptr != NULL) - if (save - nptr >= 2 && tolower (save[-1]) == 'x' && save[-2] == '0') - *endptr = (char *) &save[-1]; - else - /* There was no number to convert. */ - *endptr = (char *) nptr; - - return 0L; -} - -/* External user entry point. */ - -INT -#ifdef __strtol -__strtol -#else -strtol -#endif - (nptr, endptr, base) - const char *nptr; - char **endptr; - int base; -{ - return INTERNAL (strtol) (nptr, endptr, base, 0); -} - -#ifdef weak_symbol -weak_symbol (strtol) -#endif |