Home | History | Annotate | Line # | Download | only in libgroff
      1 /*	$NetBSD: itoa.c,v 1.1.1.1 2016/01/13 18:41:48 christos Exp $	*/
      2 
      3 /* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2004
      4      Free Software Foundation, Inc.
      5      Written by James Clark (jjc (at) jclark.com)
      6 
      7 This file is part of groff.
      8 
      9 groff is free software; you can redistribute it and/or modify it under
     10 the terms of the GNU General Public License as published by the Free
     11 Software Foundation; either version 2, or (at your option) any later
     12 version.
     13 
     14 groff is distributed in the hope that it will be useful, but WITHOUT ANY
     15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
     16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     17 for more details.
     18 
     19 You should have received a copy of the GNU General Public License along
     20 with groff; see the file COPYING.  If not, write to the Free Software
     21 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
     22 
     23 #define INT_DIGITS 19		/* enough for 64 bit integer */
     24 #define UINT_DIGITS 20
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif
     29 
     30 char *i_to_a(int i)
     31 {
     32   /* Room for INT_DIGITS digits, - and '\0' */
     33   static char buf[INT_DIGITS + 2];
     34   char *p = buf + INT_DIGITS + 1;	/* points to terminating '\0' */
     35   if (i >= 0) {
     36     do {
     37       *--p = '0' + (i % 10);
     38       i /= 10;
     39     } while (i != 0);
     40     return p;
     41   }
     42   else {			/* i < 0 */
     43     do {
     44       *--p = '0' - (i % 10);
     45       i /= 10;
     46     } while (i != 0);
     47     *--p = '-';
     48   }
     49   return p;
     50 }
     51 
     52 char *ui_to_a(unsigned int i)
     53 {
     54   /* Room for UINT_DIGITS digits and '\0' */
     55   static char buf[UINT_DIGITS + 1];
     56   char *p = buf + UINT_DIGITS;	/* points to terminating '\0' */
     57   do {
     58     *--p = '0' + (i % 10);
     59     i /= 10;
     60   } while (i != 0);
     61   return p;
     62 }
     63 
     64 #ifdef __cplusplus
     65 }
     66 #endif
     67