720e4100b83b286d9bf8cb6ed6053659ae8a9850
[platform/upstream/bash.git] / lib / sh / itos.c
1 /* itos.c -- Convert integer to string. */
2
3 /* Copyright (C) 1998, Free Software Foundation, Inc.
4
5    This file is part of GNU Bash, the Bourne Again SHell.
6
7    Bash is free software; you can redistribute it and/or modify it under
8    the terms of the GNU General Public License as published by the Free
9    Software Foundation; either version 2, or (at your option) any later
10    version.
11
12    Bash is distributed in the hope that it will be useful, but WITHOUT ANY
13    WARRANTY; without even the implied warranty of MERCHANTABILITY or
14    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15    for more details.
16
17    You should have received a copy of the GNU General Public License along
18    with Bash; see the file COPYING.  If not, write to the Free Software
19    Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21 #include <config.h>
22
23 #if defined (HAVE_UNISTD_H)
24 #  include <unistd.h>
25 #endif
26
27 #include "bashansi.h"
28 #include "shell.h"
29
30 /* Number of characters that can appear in a string representation
31    of an integer.  32 is larger than the string rep of 2^^31 - 1. */
32 #define MAX_INT_LEN 32
33
34 /* Integer to string conversion.  This conses the string; the
35    caller should free it. */
36 char *
37 itos (i)
38      int i;
39 {
40   char buf[MAX_INT_LEN], *p, *ret;
41   int negative = 0;
42   unsigned int ui;
43
44   if (i < 0)
45     {
46       negative++;
47       i = -i;
48     }
49
50   ui = (unsigned int) i;
51
52   p = buf + MAX_INT_LEN - 2;
53   p[1] = '\0';
54
55   do
56     *p-- = (ui % 10) + '0';
57   while (ui /= 10);
58
59   if (negative)
60     *p-- = '-';
61
62   ret = savestring (p + 1);
63   return (ret);
64 }