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