a64l.c revision 1.6
1/* 2 * Written by J.T. Conklin <jtc@netbsd.org>. 3 * Public domain. 4 */ 5 6#include <sys/cdefs.h> 7#if defined(LIBC_SCCS) && !defined(lint) 8__RCSID("$NetBSD: a64l.c,v 1.6 1999/09/16 11:45:33 lukem Exp $"); 9#endif 10 11#include "namespace.h" 12 13#include <assert.h> 14#include <stdlib.h> 15 16#ifdef __weak_alias 17__weak_alias(a64l,_a64l); 18#endif 19 20long 21a64l(s) 22 const char *s; 23{ 24 long value, digit, shift; 25 int i; 26 27 _DIAGASSERT(s != NULL); 28#ifdef _DIAGNOSTIC 29 if (s == NULL) 30 return (0L); 31#endif 32 33 value = 0; 34 shift = 0; 35 for (i = 0; *s && i < 6; i++, s++) { 36 if (*s <= '/') 37 digit = *s - '.'; 38 else if (*s <= '9') 39 digit = *s - '0' + 2; 40 else if (*s <= 'Z') 41 digit = *s - 'A' + 12; 42 else 43 digit = *s - 'a' + 38; 44 45 value |= digit << shift; 46 shift += 6; 47 } 48 49 return (long) value; 50} 51