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