PageRenderTime 22ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/kernel/user/libc.c

https://github.com/dls/house
C | 143 lines | 125 code | 15 blank | 3 comment | 58 complexity | 9e7a0f86a3d88abf5500c0384d02c800 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. #include "libc.h"
  2. /*
  3. * The content of this file is in the public domain.
  4. */
  5. int abs(int j) {
  6. if (j < 0)
  7. return -j;
  8. else
  9. return j;
  10. }
  11. int isdigit(int c) {
  12. return (c >= '0' && c <= '9');
  13. }
  14. void *memcpy(void *d, const void *s, size_t n) {
  15. void *d0 = d;
  16. if (s != d)
  17. for (; 0 != n; --n)
  18. *(char*)d++ = *(char*)s++;
  19. return d0;
  20. }
  21. void *memmove(void* vd, void* vs, size_t n)
  22. {
  23. char *d = vd, *s = vs;
  24. void *d0 = d;
  25. if (s < d)
  26. for (s += n, d += n; 0 != n; --n)
  27. *--d = *--s;
  28. else if (s != d)
  29. for (; 0 != n; --n)
  30. *d++ = *s++;
  31. return d0;
  32. }
  33. void *memset(void *d, int c, size_t n) {
  34. void *d0 = d;
  35. unsigned char b = (unsigned char)c;
  36. for (; 0 != n; --n)
  37. *(unsigned char*)d++ = b;
  38. return d0;
  39. }
  40. int strcmp(const char *s1, const char *s2) {
  41. for (; (*s1 != '\0') && (*s1 == *s2); ++s1, ++s2)
  42. ;
  43. return (*s1 - *s2);
  44. }
  45. char *strcpy(char *dest, const char *src)
  46. {
  47. char * tmp = dest;
  48. for (; (*dest = *src) != 0; ++dest, ++src);
  49. return tmp;
  50. }
  51. char *strncpy(char *dest, const char *src, size_t n)
  52. {
  53. if (n != 0) {
  54. char *d = dest;
  55. do {
  56. if ((*d++ = *src++) == 0) {
  57. while (--n != 0)
  58. *d++ = 0;
  59. break;
  60. }
  61. } while (--n != 0);
  62. }
  63. return dest;
  64. }
  65. size_t strlen(const char *s) {
  66. size_t len = 0;
  67. for (; s[len] != '\0'; ++len)
  68. ;
  69. return len;
  70. }
  71. size_t strnlen(const char *s, size_t maxlen) {
  72. size_t len = 0;
  73. for (; s[len] != '\0' && len < maxlen; ++len)
  74. ;
  75. return len;
  76. }
  77. char *
  78. strrchr (s, c)
  79. register const char *s;
  80. int c;
  81. {
  82. char *rtnval = 0;
  83. do {
  84. if (*s == c)
  85. rtnval = (char*) s;
  86. } while (*s++);
  87. return (rtnval);
  88. }
  89. double atof(char *s)
  90. {
  91. double a = 0.0;
  92. int e = 0;
  93. int c;
  94. while ((c = *s++) != '\0' && isdigit(c)) {
  95. a = a*10.0 + (c - '0');
  96. }
  97. if (c == '.') {
  98. while ((c = *s++) != '\0' && isdigit(c)) {
  99. a = a*10.0 + (c - '0');
  100. e = e-1;
  101. }
  102. }
  103. if (c == 'e' || c == 'E') {
  104. int sign = 1;
  105. int i = 0;
  106. c = *s++;
  107. if (c == '+')
  108. c = *s++;
  109. else if (c == '-') {
  110. c = *s++;
  111. sign = -1;
  112. }
  113. while (isdigit(c)) {
  114. i = i*10 + (c - '0');
  115. c = *s++;
  116. }
  117. e += i*sign;
  118. }
  119. while (e > 0) {
  120. a *= 10.0;
  121. e--;
  122. }
  123. while (e < 0) {
  124. a *= 0.1;
  125. e++;
  126. }
  127. return a;
  128. }