1/* 2 * Written by J.T. Conklin <jtc@NetBSD.org>. 3 * Public domain. 4 */ 5 6#if 0 7#if defined(LIBC_SCCS) && !defined(lint) 8__RCSID("$NetBSD: l64a.c,v 1.13 2003/07/26 19:24:54 salo Exp $"); 9#endif /* not lint */ 10#endif 11 12#include <sys/cdefs.h> 13__FBSDID("$FreeBSD$"); 14 15#include <stdlib.h> 16 17#define ADOT 46 /* ASCII '.' */ 18#define ASLASH ADOT + 1 /* ASCII '/' */ 19#define A0 48 /* ASCII '0' */ 20#define AA 65 /* ASCII 'A' */ 21#define Aa 97 /* ASCII 'a' */ 22 23char * 24l64a(long value) 25{ 26 static char buf[8]; 27 28 (void)l64a_r(value, buf, sizeof(buf)); 29 return (buf); 30} 31 32int 33l64a_r(long value, char *buffer, int buflen) 34{ 35 long v; 36 int digit; 37 38 v = value & (long)0xffffffff; 39 for (; v != 0 && buflen > 1; buffer++, buflen--) { 40 digit = v & 0x3f; 41 if (digit < 2) 42 *buffer = digit + ADOT; 43 else if (digit < 12) 44 *buffer = digit + A0 - 2; 45 else if (digit < 38) 46 *buffer = digit + AA - 12; 47 else 48 *buffer = digit + Aa - 38; 49 v >>= 6; 50 } 51 return (v == 0 ? 0 : -1); 52} 53