atol.c 754 B

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