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

/support/c/libc.c

https://github.com/dls/house
C | 135 lines | 119 code | 13 blank | 3 comment | 56 complexity | d2b13339516ad51e3e3e0cf019544d70 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. /*
  2. * The content of this file is in the public domain.
  3. */
  4. typedef unsigned int size_t;
  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* d, void* s, size_t n)
  22. {
  23. char *cd = d;
  24. char *cs = s;
  25. if (s < d)
  26. for (cs += n, cd += n; 0 != n; --n)
  27. *--cd = *--cs;
  28. else if (s != d)
  29. for (; 0 != n; --n)
  30. *cd++ = *cs++;
  31. return d;
  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 strnlen(const char *s, size_t maxlen) {
  66. size_t len = 0;
  67. for (; s[len] != '\0' && len < maxlen; ++len)
  68. ;
  69. return len;
  70. }
  71. char *
  72. strrchr (s, c)
  73. register const char *s;
  74. int c;
  75. {
  76. char *rtnval = 0;
  77. do {
  78. if (*s == c)
  79. rtnval = (char*) s;
  80. } while (*s++);
  81. return (rtnval);
  82. }
  83. double atof_hop(char *s)
  84. {
  85. double a = 0.0;
  86. int e = 0;
  87. int c;
  88. while ((c = *s++) != '\0' && isdigit(c)) {
  89. a = a*10.0 + (c - '0');
  90. }
  91. if (c == '.') {
  92. while ((c = *s++) != '\0' && isdigit(c)) {
  93. a = a*10.0 + (c - '0');
  94. e = e-1;
  95. }
  96. }
  97. if (c == 'e' || c == 'E') {
  98. int sign = 1;
  99. int i = 0;
  100. c = *s++;
  101. if (c == '+')
  102. c = *s++;
  103. else if (c == '-') {
  104. c = *s++;
  105. sign = -1;
  106. }
  107. while (isdigit(c)) {
  108. i = i*10 + (c - '0');
  109. c = *s++;
  110. }
  111. e += i*sign;
  112. }
  113. while (e > 0) {
  114. a *= 10.0;
  115. e--;
  116. }
  117. while (e < 0) {
  118. a *= 0.1;
  119. e++;
  120. }
  121. return a;
  122. }