Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
2.8 KiB

  1. /*
  2. * crt.cpp
  3. */
  4. #define _CRTIMP
  5. #include <windows.h>
  6. #include <assert.h>
  7. #include "crt.h"
  8. void * __cdecl operator new(size_t cb)
  9. {
  10. void *res = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cb);
  11. return res;
  12. }
  13. void __cdecl operator delete(void * p)
  14. {
  15. HeapFree(GetProcessHeap(), 0, p);;
  16. }
  17. #ifdef _X86_
  18. #undef tolower
  19. #define isupper(c) ((c) >= 'A' && (c) <= 'Z')
  20. #define mklower(c) ((c) - 'A' + 'a')
  21. int __cdecl tolower(
  22. int c
  23. )
  24. {
  25. return (isupper(c)) ? mklower(c) : c;
  26. }
  27. int __cdecl _stricmp(
  28. const char *one,
  29. const char *two
  30. )
  31. {
  32. assert(one && two);
  33. for (; tolower(*one) == tolower(*two); one++, two++)
  34. {
  35. if (!*one)
  36. return 0;
  37. }
  38. if (!*one)
  39. return -1;
  40. if (!*two)
  41. return 1;
  42. return (tolower(*one) - tolower(*two));
  43. }
  44. int __cdecl strncmp(
  45. const char *one,
  46. const char *two,
  47. size_t len
  48. )
  49. {
  50. size_t i;
  51. for (i = 0; i < len; i++, one++, two++) {
  52. if (*one == *two)
  53. continue;
  54. if (!*one)
  55. return -1;
  56. if (!*two)
  57. return 1;
  58. return (*one - *two);
  59. }
  60. return 0;
  61. }
  62. int __cdecl _strnicmp(
  63. const char *one,
  64. const char *two,
  65. size_t len
  66. )
  67. {
  68. size_t i;
  69. int c1;
  70. int c2;
  71. for (i = 0; i < len; i++, one++, two++)
  72. {
  73. c1 = tolower(*one);
  74. c2 = tolower(*two);
  75. if (c1 == c2)
  76. continue;
  77. if (!c1)
  78. return -1;
  79. if (!c2)
  80. return 1;
  81. return (c1 - c2);
  82. }
  83. return 0;
  84. }
  85. char * __cdecl strchr(
  86. const char *sz,
  87. int c
  88. )
  89. {
  90. for (; *sz; sz++)
  91. {
  92. if (*sz == c)
  93. return (char *)sz;
  94. }
  95. return NULL;
  96. }
  97. char * __cdecl strrchr(
  98. const char *sz,
  99. int c
  100. )
  101. {
  102. const char *p;
  103. if (!c)
  104. return NULL;
  105. for (p = sz + strlen(sz); p >= sz; p--)
  106. {
  107. if (*p == c)
  108. return (char *)p;
  109. }
  110. return NULL;
  111. }
  112. char * __cdecl strstr(
  113. const char *sz,
  114. const char *token
  115. )
  116. {
  117. int len;
  118. len = strlen(token);
  119. for (; *sz; sz++)
  120. {
  121. if (*sz == *token)
  122. {
  123. if (!strncmp(sz, token, len))
  124. return (char *)sz;
  125. }
  126. }
  127. return NULL;
  128. }
  129. int __cdecl isspace(int c)
  130. {
  131. switch (c)
  132. {
  133. case 0x9: // tab
  134. case 0xD: // CR
  135. case 0x20: // space
  136. return true;
  137. }
  138. return false;
  139. }
  140. #pragma function(memcpy)
  141. void * __cdecl memcpy(void *dest, const void *src, size_t count)
  142. {
  143. while (count) {
  144. *(char *)dest = *(char *)src;
  145. count--;
  146. }
  147. return dest;
  148. }
  149. #endif // #ifdef _X86_