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

/boot/memstr.c

https://bitbucket.org/dimichxp/2ndboot
C | 68 lines | 57 code | 11 blank | 0 comment | 12 complexity | 65e2a4a088cc1c89d4972d10a899ca09 MD5 | raw file
  1. #include "string.h"
  2. void *memcpy(void *dest, const void *src, size_t n) {
  3. char *d = (char*)dest;
  4. const char *s = (const char*)src;
  5. while (n-- > 0) {
  6. *d++ = *s++;
  7. }
  8. return dest;
  9. }
  10. void *memset(void *dest, int fill, size_t n) {
  11. unsigned char *d = (unsigned char*)dest;
  12. while (n-- > 0) {
  13. *d++ = (unsigned char)fill;
  14. }
  15. return dest;
  16. }
  17. int memcmp(const void *s1, const void *s2, size_t n) {
  18. unsigned char *ss1 = (unsigned char*)s1;
  19. unsigned char *ss2 = (unsigned char*)s2;
  20. while (n-- > 0) {
  21. if (*ss1 != *ss2) {
  22. return *ss1 - *ss2;
  23. }
  24. ++ss1;
  25. ++ss2;
  26. }
  27. return 0;
  28. }
  29. size_t strlen(const char *s) {
  30. size_t n = 0;
  31. while (*s++) n++;
  32. return n;
  33. }
  34. char *strcpy(char *d, const char *s) {
  35. char *dest = d;
  36. while (*d++ = *s++);
  37. return dest;
  38. }
  39. int strcmp(const char *s1, const char *s2) {
  40. size_t l1, l2;
  41. l1 = strlen(s1);
  42. l2 = strlen(s2);
  43. if (l1 < l2) {
  44. return -1;
  45. }
  46. if (l1 > l2) {
  47. return 1;
  48. }
  49. while (*s1) {
  50. if (*s1 != *s2) {
  51. return *s1 - *s2;
  52. }
  53. ++s1;
  54. ++s2;
  55. }
  56. return 0;
  57. }