StdLib.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "types.h"
  2. #include "Assertions.h"
  3. #include "kmalloc.h"
  4. #include <AK/Types.h>
  5. void memcpy(void *dest, const void *src, DWORD n)
  6. {
  7. BYTE* bdest = (BYTE*)dest;
  8. const BYTE* bsrc = (const BYTE*)src;
  9. for (; n; --n)
  10. *(bdest++) = *(bsrc++);
  11. }
  12. void strcpy(char* dest, const char *src)
  13. {
  14. while ((*dest++ = *src++) != '\0');
  15. }
  16. void* memset(void* dest, BYTE c, DWORD n)
  17. {
  18. BYTE *bdest = (BYTE *)dest;
  19. for (; n; --n)
  20. *(bdest++) = c;
  21. return dest;
  22. }
  23. char* strrchr(const char* str, int ch)
  24. {
  25. char *last = nullptr;
  26. char c;
  27. for (; (c = *str); ++str) {
  28. if (c == ch)
  29. last = (char*)str;
  30. }
  31. return last;
  32. }
  33. DWORD strlen(const char* str)
  34. {
  35. DWORD len = 0;
  36. while (*(str++))
  37. ++len;
  38. return len;
  39. }
  40. int strcmp(const char *s1, const char *s2)
  41. {
  42. for (; *s1 == *s2; ++s1, ++s2) {
  43. if (*s1 == 0)
  44. return 0;
  45. }
  46. return *(const BYTE*)s1 < *(const BYTE*)s2 ? -1 : 1;
  47. }
  48. char* strdup(const char *str)
  49. {
  50. DWORD len = strlen(str);
  51. char *s = (char*)kmalloc(len);
  52. memcpy(s, str, len);
  53. return s;
  54. }
  55. int memcmp(const void* v1, const void* v2, size_t n)
  56. {
  57. auto* s1 = (const byte*)v1;
  58. auto* s2 = (const byte*)v2;
  59. while (n-- > 0) {
  60. if (*s1++ != *s2++)
  61. return s1[-1] < s2[-1] ? -1 : 1;
  62. }
  63. return 0;
  64. }
  65. extern "C" void __cxa_pure_virtual()
  66. {
  67. ASSERT_NOT_REACHED();
  68. }