Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <errno.h>
  3. #include <stdlib.h>
  4.  
  5. char *
  6. itoa(int value, char *string, int radix)
  7. {
  8.   char tmp[33];
  9.   char *tp = tmp;
  10.   int i;
  11.   unsigned v;
  12.   int sign;
  13.   char *sp;
  14.  
  15.   if (radix > 36 || radix <= 1)
  16.   {
  17.     errno = EDOM;
  18.     return 0;
  19.   }
  20.  
  21.   sign = (radix == 10 && value < 0);
  22.   if (sign)
  23.     v = -value;
  24.   else
  25.     v = (unsigned)value;
  26.   while (v || tp == tmp)
  27.   {
  28.     i = v % radix;
  29.     v = v / radix;
  30.     if (i < 10)
  31.       *tp++ = i+'0';
  32.     else
  33.       *tp++ = i + 'a' - 10;
  34.   }
  35.  
  36.   if (string == 0)
  37.     string = (char *)malloc((tp-tmp)+sign+1);
  38.   sp = string;
  39.  
  40.   if (sign)
  41.     *sp++ = '-';
  42.   while (tp > tmp)
  43.     *sp++ = *--tp;
  44.   *sp = 0;
  45.   return string;
  46. }
  47.