l64a.c revision 1.9
1/*	$NetBSD: l64a.c,v 1.9 1999/02/06 15:04:05 kleink Exp $	*/
2
3/*
4 * Written by J.T. Conklin <jtc@netbsd.org>.
5 * Public domain.
6 */
7
8#include <sys/cdefs.h>
9#if defined(LIBC_SCCS) && !defined(lint)
10__RCSID("$NetBSD: l64a.c,v 1.9 1999/02/06 15:04:05 kleink Exp $");
11#endif
12
13#include "namespace.h"
14#include <stdlib.h>
15
16#ifdef __weak_alias
17__weak_alias(l64a,_l64a);
18__weak_alias(l64a_r,_l64a_r);
19#endif
20
21char *
22l64a (value)
23	long value;
24{
25	static char buf[8];
26
27	(void)l64a_r(value, buf, sizeof (buf));
28	return buf;
29}
30
31int
32l64a_r (value, buffer, buflen)
33	long value;
34	char *buffer;
35	int buflen;
36{
37	char *s = buffer;
38	int digit;
39	unsigned long v = value;
40
41	if (value == 0UL)
42		goto out;
43
44	for (; v != 0 && buflen > 1; s++, buflen--) {
45		digit = (int)(v & 0x3f);
46
47		if (digit < 2)
48			*s = digit + '.';
49		else if (digit < 12)
50			*s = digit + '0' - 2;
51		else if (digit < 38)
52			*s = digit + 'A' - 12;
53		else
54			*s = digit + 'a' - 38;
55		v >>= 6;
56	}
57
58out:
59	*s = '\0';
60
61	return (v == 0UL ? 0 : -1);
62}
63