l64a.c revision 1.9
11.9Skleink/* $NetBSD: l64a.c,v 1.9 1999/02/06 15:04:05 kleink Exp $ */ 21.9Skleink 31.1Sjtc/* 41.4Sjtc * Written by J.T. Conklin <jtc@netbsd.org>. 51.4Sjtc * Public domain. 61.1Sjtc */ 71.1Sjtc 81.5Schristos#include <sys/cdefs.h> 91.1Sjtc#if defined(LIBC_SCCS) && !defined(lint) 101.9Skleink__RCSID("$NetBSD: l64a.c,v 1.9 1999/02/06 15:04:05 kleink Exp $"); 111.1Sjtc#endif 121.1Sjtc 131.6Sjtc#include "namespace.h" 141.1Sjtc#include <stdlib.h> 151.6Sjtc 161.6Sjtc#ifdef __weak_alias 171.6Sjtc__weak_alias(l64a,_l64a); 181.9Skleink__weak_alias(l64a_r,_l64a_r); 191.6Sjtc#endif 201.1Sjtc 211.1Sjtcchar * 221.1Sjtcl64a (value) 231.1Sjtc long value; 241.1Sjtc{ 251.1Sjtc static char buf[8]; 261.9Skleink 271.9Skleink (void)l64a_r(value, buf, sizeof (buf)); 281.9Skleink return buf; 291.9Skleink} 301.9Skleink 311.9Skleinkint 321.9Skleinkl64a_r (value, buffer, buflen) 331.9Skleink long value; 341.9Skleink char *buffer; 351.9Skleink int buflen; 361.9Skleink{ 371.9Skleink char *s = buffer; 381.1Sjtc int digit; 391.8Schristos unsigned long v = value; 401.1Sjtc 411.9Skleink if (value == 0UL) 421.7Skleink goto out; 431.1Sjtc 441.9Skleink for (; v != 0 && buflen > 1; s++, buflen--) { 451.8Schristos digit = (int)(v & 0x3f); 461.1Sjtc 471.1Sjtc if (digit < 2) 481.1Sjtc *s = digit + '.'; 491.1Sjtc else if (digit < 12) 501.1Sjtc *s = digit + '0' - 2; 511.1Sjtc else if (digit < 38) 521.1Sjtc *s = digit + 'A' - 12; 531.1Sjtc else 541.1Sjtc *s = digit + 'a' - 38; 551.8Schristos v >>= 6; 561.1Sjtc } 571.1Sjtc 581.7Skleinkout: 591.1Sjtc *s = '\0'; 601.1Sjtc 611.9Skleink return (v == 0UL ? 0 : -1); 621.1Sjtc} 63