1 #include <u.h> 2 #include <libc.h> 3 4 long 5 atol(char *s) 6 { 7 long n; 8 int f; 9 10 n = 0; 11 f = 0; 12 while(*s == ' ' || *s == '\t') 13 s++; 14 if(*s == '-' || *s == '+') { 15 if(*s++ == '-') 16 f = 1; 17 while(*s == ' ' || *s == '\t') 18 s++; 19 } 20 if(s[0]=='0' && s[1]){ 21 if(s[1]=='x' || s[1]=='X'){ 22 s += 2; 23 for(;;){ 24 if(*s >= '0' && *s <= '9') 25 n = n*16 + *s++ - '0'; 26 else if(*s >= 'a' && *s <= 'f') 27 n = n*16 + *s++ - 'a' + 10; 28 else if(*s >= 'A' && *s <= 'F') 29 n = n*16 + *s++ - 'A' + 10; 30 else 31 break; 32 } 33 } else 34 while(*s >= '0' && *s <= '7') 35 n = n*8 + *s++ - '0'; 36 } else 37 while(*s >= '0' && *s <= '9') 38 n = n*10 + *s++ - '0'; 39 if(f) 40 n = -n; 41 return n; 42 } 43 44 atoi(char *s) 45 { 46 47 return atol(s); 48 } 49