l64a.c revision 1.12
11.12Smycroft/* $NetBSD: l64a.c,v 1.12 2000/01/22 22:19:19 mycroft 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.12Smycroft__RCSID("$NetBSD: l64a.c,v 1.12 2000/01/22 22:19:19 mycroft Exp $"); 111.1Sjtc#endif 121.1Sjtc 131.6Sjtc#include "namespace.h" 141.10Slukem 151.10Slukem#include <assert.h> 161.10Slukem#include <errno.h> 171.1Sjtc#include <stdlib.h> 181.6Sjtc 191.6Sjtc#ifdef __weak_alias 201.12Smycroft__weak_alias(l64a,_l64a) 211.12Smycroft__weak_alias(l64a_r,_l64a_r) 221.6Sjtc#endif 231.1Sjtc 241.1Sjtcchar * 251.1Sjtcl64a (value) 261.1Sjtc long value; 271.1Sjtc{ 281.1Sjtc static char buf[8]; 291.9Skleink 301.9Skleink (void)l64a_r(value, buf, sizeof (buf)); 311.9Skleink return buf; 321.9Skleink} 331.9Skleink 341.9Skleinkint 351.9Skleinkl64a_r (value, buffer, buflen) 361.9Skleink long value; 371.9Skleink char *buffer; 381.9Skleink int buflen; 391.9Skleink{ 401.9Skleink char *s = buffer; 411.1Sjtc int digit; 421.8Schristos unsigned long v = value; 431.10Slukem 441.10Slukem _DIAGASSERT(buffer != NULL); 451.1Sjtc 461.9Skleink if (value == 0UL) 471.7Skleink goto out; 481.1Sjtc 491.9Skleink for (; v != 0 && buflen > 1; s++, buflen--) { 501.8Schristos digit = (int)(v & 0x3f); 511.1Sjtc 521.1Sjtc if (digit < 2) 531.1Sjtc *s = digit + '.'; 541.1Sjtc else if (digit < 12) 551.1Sjtc *s = digit + '0' - 2; 561.1Sjtc else if (digit < 38) 571.1Sjtc *s = digit + 'A' - 12; 581.1Sjtc else 591.1Sjtc *s = digit + 'a' - 38; 601.8Schristos v >>= 6; 611.1Sjtc } 621.1Sjtc 631.7Skleinkout: 641.1Sjtc *s = '\0'; 651.1Sjtc 661.9Skleink return (v == 0UL ? 0 : -1); 671.1Sjtc} 68