xref: /dragonfly/lib/libc/stdlib/l64a.c (revision abf903a5)
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