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