1/* Internal function for converting integers to ASCII. 2 Copyright (C) 1994, 95, 96, 97, 98, 99, 2002 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, write to the Free 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 19 20#ifndef _ITOA_H 21#define _ITOA_H 22#include <sys/cdefs.h> 23 24/* Convert VALUE into ASCII in base BASE (2..36). 25 Write backwards starting the character just before BUFLIM. 26 Return the address of the first (left-to-right) character in the number. 27 Use upper case letters iff UPPER_CASE is nonzero. */ 28 29extern char *_itoa (unsigned long long int value, char *buflim, 30 unsigned int base, int upper_case); 31 32extern const char _itoa_upper_digits[]; 33extern const char _itoa_upper_digits_internal[] attribute_hidden; 34extern const char _itoa_lower_digits[]; 35extern const char _itoa_lower_digits_internal[] attribute_hidden; 36 37static inline char * __attribute__ ((unused)) 38_itoa_word (unsigned long value, char *buflim, 39 unsigned int base, int upper_case) 40{ 41 const char *digits = (upper_case 42#if !defined NOT_IN_libc || defined IS_IN_rtld 43 ? INTUSE(_itoa_upper_digits) 44 : INTUSE(_itoa_lower_digits) 45#else 46 ? _itoa_upper_digits 47 : _itoa_lower_digits 48#endif 49 ); 50 51 switch (base) 52 { 53#define SPECIAL(Base) \ 54 case Base: \ 55 do \ 56 *--buflim = digits[value % Base]; \ 57 while ((value /= Base) != 0); \ 58 break 59 60 SPECIAL (10); 61 SPECIAL (16); 62 SPECIAL (8); 63 default: 64 do 65 *--buflim = digits[value % base]; 66 while ((value /= base) != 0); 67 } 68 return buflim; 69} 70#undef SPECIAL 71 72static inline char * __attribute__ ((unused)) 73_fitoa_word (unsigned long value, char *buf, unsigned int base, int upper_case) 74{ 75 char tmpbuf[sizeof (value) * 4]; /* Worst case length: base 2. */ 76 char *cp = _itoa_word (value, tmpbuf + sizeof (value) * 4, base, upper_case); 77 while (cp < tmpbuf + sizeof (value) * 4) 78 *buf++ = *cp++; 79 return buf; 80} 81 82static inline char * __attribute__ ((unused)) 83_fitoa (unsigned long long value, char *buf, unsigned int base, int upper_case) 84{ 85 char tmpbuf[sizeof (value) * 4]; /* Worst case length: base 2. */ 86 char *cp = _itoa (value, tmpbuf + sizeof (value) * 4, base, upper_case); 87 while (cp < tmpbuf + sizeof (value) * 4) 88 *buf++ = *cp++; 89 return buf; 90} 91 92#endif /* itoa.h */ 93