static char *ultoa (unsigned long val, char *s, int radix) { if (radix < 2 || radix > 36) s[0] = 0; else *ultoa_recursive (val, s, radix) = 0; return s; }
static char *ultoa_recursive (unsigned long val, char *s, unsigned radix) { int c; if (val >= radix) s = ultoa_recursive (val / radix, s, radix); c = val % radix; c += (c < 10 ? '0' : 'a' - 10); *s++ = c; return s; }
char *ltoa (long val, char *s, int radix) { if (radix < 2 || radix > 36) { s[0] = 0; } else { char *p = s; if (radix == 10 && val < 0) { val = -val; *p++ = '-'; } *ultoa_recursive (val, p, radix) = 0; } return s; }