Imported from ../bash-2.03.tar.gz.
[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.  The caller passes the buffer and
35    the size.  This should check for buffer underflow, but currently
36    does not. */
37 char *
38 inttostr (i, buf, len)
39      int i;
40      char *buf;
41      int len;
42 {
43   char *p;
44   int negative = 0;
45   unsigned int ui;
46
47   if (i < 0)
48     {
49       negative++;
50       i = -i;
51     }
52
53   ui = (unsigned int) i;
54
55   p = buf + len - 2;
56   p[1] = '\0';
57
58   do
59     *p-- = (ui % 10) + '0';
60   while (ui /= 10);
61
62   if (negative)
63     *p-- = '-';
64
65   return (p + 1);
66 }
67
68 /* Integer to string conversion.  This conses the string; the
69    caller should free it. */
70 char *
71 itos (i)
72      int i;
73 {
74   char *p, lbuf[MAX_INT_LEN];
75
76   p = inttostr (i, lbuf, sizeof(lbuf));
77   return (savestring (p));
78 }