1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Add _ITOA_NEEDED and _ITOA_WORD_TYPE

Add _ITOA_NEEDED and _ITOA_WORD_TYPE to override _itoa and _itowa.
This commit is contained in:
H.J. Lu
2012-03-21 14:38:47 -07:00
parent 6f4db457f8
commit 8e95c99a7a
4 changed files with 46 additions and 6 deletions

View File

@ -1,3 +1,20 @@
2012-03-21 H.J. Lu <hongjiu.lu@intel.com>
* stdio-common/_itoa.c: Check _ITOA_NEEDED instead of
LLONG_MAX != LONG_MAX.
(_itoa_word): Use _ITOA_WORD_TYPE on value.
(_fitoa_word): Likewise.
* stdio-common/_itowa.c: Check _ITOA_NEEDED instead of
LLONG_MAX != LONG_MAX.
* stdio-common/_itowa.h: Include <_itoa.h>.
(_itowa_word): Use _ITOA_WORD_TYPE on value.
(_itowa): New macro. Defined only if _ITOA_NEEDED is false.
* sysdeps/generic/_itoa.h (_ITOA_NEEDED): New macro. Defined
only if not defined.
(_ITOA_WORD_TYPE): Likewise.
(_itoa_word): Use _ITOA_WORD_TYPE on value.
Check !_ITOA_NEEDED instead of LONG_MAX == LLONG_MAX.
2012-03-21 David S. Miller <davem@davemloft.net> 2012-03-21 David S. Miller <davem@davemloft.net>
* sysdeps/sparc/fpu/libm-test-ulps: Update. * sysdeps/sparc/fpu/libm-test-ulps: Update.

View File

@ -85,7 +85,7 @@ extern const wchar_t _itowa_lower_digits[] attribute_hidden;
extern const wchar_t _itowa_upper_digits[] attribute_hidden; extern const wchar_t _itowa_upper_digits[] attribute_hidden;
#if LLONG_MAX != LONG_MAX #if _ITOA_NEEDED
wchar_t * wchar_t *
_itowa (value, buflim, base, upper_case) _itowa (value, buflim, base, upper_case)
unsigned long long int value; unsigned long long int value;

View File

@ -20,6 +20,7 @@
#define _ITOWA_H 1 #define _ITOWA_H 1
#include <features.h> #include <features.h>
#include <wchar.h> #include <wchar.h>
#include <_itoa.h>
/* Convert VALUE into ASCII in base BASE (2..36). /* Convert VALUE into ASCII in base BASE (2..36).
Write backwards starting the character just before BUFLIM. Write backwards starting the character just before BUFLIM.
@ -31,7 +32,7 @@ extern wchar_t *_itowa (unsigned long long int value, wchar_t *buflim,
static inline wchar_t * static inline wchar_t *
__attribute__ ((unused, always_inline)) __attribute__ ((unused, always_inline))
_itowa_word (unsigned long value, wchar_t *buflim, _itowa_word (_ITOA_WORD_TYPE value, wchar_t *buflim,
unsigned int base, int upper_case) unsigned int base, int upper_case)
{ {
extern const wchar_t _itowa_upper_digits[] attribute_hidden; extern const wchar_t _itowa_upper_digits[] attribute_hidden;
@ -61,4 +62,10 @@ _itowa_word (unsigned long value, wchar_t *buflim,
} }
#undef SPECIAL #undef SPECIAL
#if !_ITOA_NEEDED
/* No need for special long long versions. */
# define _itowa(value, buf, base, upper_case) \
_itowa_word (value, buf, base, upper_case)
#endif
#endif /* itowa.h */ #endif /* itowa.h */

View File

@ -21,6 +21,21 @@
#include <limits.h> #include <limits.h>
/* When long long is different from long, by default, _itoa_word is
provided to convert long to ASCII and _itoa is provided to convert
long long. A sysdeps _itoa.h can define _ITOA_NEEDED to 0 and define
_ITOA_WORD_TYPE to unsigned long long int to override it so that
_itoa_word is changed to convert long long to ASCII and _itoa is
mapped to _itoa_word. */
#ifndef _ITOA_NEEDED
# define _ITOA_NEEDED (LONG_MAX != LLONG_MAX)
#endif
#ifndef _ITOA_WORD_TYPE
# define _ITOA_WORD_TYPE unsigned long int
#endif
/* Convert VALUE into ASCII in base BASE (2..36). /* Convert VALUE into ASCII in base BASE (2..36).
Write backwards starting the character just before BUFLIM. Write backwards starting the character just before BUFLIM.
Return the address of the first (left-to-right) character in the number. Return the address of the first (left-to-right) character in the number.
@ -35,11 +50,11 @@ extern const char _itoa_lower_digits[];
extern const char _itoa_lower_digits_internal[] attribute_hidden; extern const char _itoa_lower_digits_internal[] attribute_hidden;
#ifndef NOT_IN_libc #ifndef NOT_IN_libc
extern char *_itoa_word (unsigned long value, char *buflim, extern char *_itoa_word (_ITOA_WORD_TYPE value, char *buflim,
unsigned int base, int upper_case); unsigned int base, int upper_case);
#else #else
static inline char * __attribute__ ((unused, always_inline)) static inline char * __attribute__ ((unused, always_inline))
_itoa_word (unsigned long value, char *buflim, _itoa_word (_ITOA_WORD_TYPE value, char *buflim,
unsigned int base, int upper_case) unsigned int base, int upper_case)
{ {
const char *digits = (upper_case const char *digits = (upper_case
@ -76,12 +91,13 @@ _itoa_word (unsigned long value, char *buflim,
/* Similar to the _itoa functions, but output starts at buf and pointer /* Similar to the _itoa functions, but output starts at buf and pointer
after the last written character is returned. */ after the last written character is returned. */
extern char *_fitoa_word (unsigned long value, char *buf, unsigned int base, extern char *_fitoa_word (_ITOA_WORD_TYPE value, char *buf,
unsigned int base,
int upper_case) attribute_hidden; int upper_case) attribute_hidden;
extern char *_fitoa (unsigned long long value, char *buf, unsigned int base, extern char *_fitoa (unsigned long long value, char *buf, unsigned int base,
int upper_case) attribute_hidden; int upper_case) attribute_hidden;
#if LONG_MAX == LLONG_MAX #if !_ITOA_NEEDED
/* No need for special long long versions. */ /* No need for special long long versions. */
# define _itoa(value, buf, base, upper_case) \ # define _itoa(value, buf, base, upper_case) \
_itoa_word (value, buf, base, upper_case) _itoa_word (value, buf, base, upper_case)