xref: /aosp_15_r20/external/musl/src/misc/a64l.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <stdlib.h>
2*c9945492SAndroid Build Coastguard Worker #include <string.h>
3*c9945492SAndroid Build Coastguard Worker #include <stdint.h>
4*c9945492SAndroid Build Coastguard Worker 
5*c9945492SAndroid Build Coastguard Worker static const char digits[] =
6*c9945492SAndroid Build Coastguard Worker 	"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
7*c9945492SAndroid Build Coastguard Worker 
a64l(const char * s)8*c9945492SAndroid Build Coastguard Worker long a64l(const char *s)
9*c9945492SAndroid Build Coastguard Worker {
10*c9945492SAndroid Build Coastguard Worker 	int e;
11*c9945492SAndroid Build Coastguard Worker 	uint32_t x = 0;
12*c9945492SAndroid Build Coastguard Worker 	for (e=0; e<36 && *s; e+=6, s++) {
13*c9945492SAndroid Build Coastguard Worker 		const char *d = strchr(digits, *s);
14*c9945492SAndroid Build Coastguard Worker 		if (!d) break;
15*c9945492SAndroid Build Coastguard Worker 		x |= (uint32_t)(d-digits)<<e;
16*c9945492SAndroid Build Coastguard Worker 	}
17*c9945492SAndroid Build Coastguard Worker 	return (int32_t)x;
18*c9945492SAndroid Build Coastguard Worker }
19*c9945492SAndroid Build Coastguard Worker 
l64a(long x0)20*c9945492SAndroid Build Coastguard Worker char *l64a(long x0)
21*c9945492SAndroid Build Coastguard Worker {
22*c9945492SAndroid Build Coastguard Worker 	static char s[7];
23*c9945492SAndroid Build Coastguard Worker 	char *p;
24*c9945492SAndroid Build Coastguard Worker 	uint32_t x = x0;
25*c9945492SAndroid Build Coastguard Worker 	for (p=s; x; p++, x>>=6)
26*c9945492SAndroid Build Coastguard Worker 		*p = digits[x&63];
27*c9945492SAndroid Build Coastguard Worker 	*p = 0;
28*c9945492SAndroid Build Coastguard Worker 	return s;
29*c9945492SAndroid Build Coastguard Worker }
30