1 /* 2 * Written by J.T. Conklin <jtc@NetBSD.org>. 3 * Public domain. 4 * 5 * $NetBSD: l64a.c,v 1.13 2003/07/26 19:24:54 salo Exp $ 6 * $FreeBSD: src/lib/libc/stdlib/l64a.c,v 1.1 2005/12/24 22:37:59 trhodes Exp $ 7 */ 8 9 #include <stdlib.h> 10 11 char * 12 l64a(long value) 13 { 14 static char buf[8]; 15 16 l64a_r(value, buf, sizeof(buf)); 17 return (buf); 18 } 19 20 int 21 l64a_r(long value, char *buffer, int buflen) 22 { 23 long v; 24 int digit; 25 26 v = value & (long)0xffffffff; 27 for (; v != 0 && buflen > 1; buffer++, buflen--) { 28 digit = v & 0x3f; 29 if (digit < 2) 30 *buffer = digit + '.'; 31 else if (digit < 12) 32 *buffer = digit + '0' - 2; 33 else if (digit < 38) 34 *buffer = digit + 'A' - 12; 35 else 36 *buffer = digit + 'a' - 38; 37 v >>= 6; 38 } 39 return (v == 0 ? 0 : -1); 40 } 41