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

/freertos/string-util.c

https://github.com/gototop/stm32f429-freertos800
C | 76 lines | 64 code | 10 blank | 2 comment | 15 complexity | 6484082b42048d3bcace969cb356eb5f MD5 | raw file
  1. #include <stddef.h>
  2. #include <stdint.h>
  3. #include <limits.h>
  4. #define ALIGN (sizeof(size_t))
  5. #define ONES ((size_t)-1/UCHAR_MAX)
  6. #define HIGHS (ONES * (UCHAR_MAX/2+1))
  7. #define HASZERO(x) ((x)-ONES & ~(x) & HIGHS)
  8. #define SS (sizeof(size_t))
  9. void *memset(void *dest, int c, size_t n)
  10. {
  11. unsigned char *s = dest;
  12. c = (unsigned char)c;
  13. for (; ((uintptr_t)s & ALIGN) && n; n--) *s++ = c;
  14. if (n) {
  15. size_t *w, k = ONES * c;
  16. for (w = (void *)s; n>=SS; n-=SS, w++) *w = k;
  17. for (s = (void *)w; n; n--, s++) *s = c;
  18. }
  19. return dest;
  20. }
  21. void *memcpy(void *dest, const void *src, size_t n)
  22. {
  23. void *ret = dest;
  24. //Cut rear
  25. uint8_t *dst8 = dest;
  26. const uint8_t *src8 = src;
  27. switch (n % 4) {
  28. case 3 : *dst8++ = *src8++;
  29. case 2 : *dst8++ = *src8++;
  30. case 1 : *dst8++ = *src8++;
  31. case 0 : ;
  32. }
  33. //stm32 data bus width
  34. uint32_t *dst32 = (void *)dst8;
  35. const uint32_t *src32 = (void *)src8;
  36. n = n / 4;
  37. while (n--) {
  38. *dst32++ = *src32++;
  39. }
  40. return ret;
  41. }
  42. char *strchr(const char *s, int c)
  43. {
  44. for (; *s && *s != c; s++);
  45. return (*s == c) ? (char *)s : NULL;
  46. }
  47. char *strcpy(char *dest, const char *src)
  48. {
  49. const char *s = src;
  50. char *d = dest;
  51. while ((*d++ = *s++));
  52. return dest;
  53. }
  54. char *strncpy(char *dest, const char *src, size_t n)
  55. {
  56. const char *s = src;
  57. char *d = dest;
  58. while (n-- && (*d++ = *s++));
  59. return dest;
  60. }
  61. int strcmp(const char *a, const char *b)
  62. {
  63. while(*a && (*a==*b))
  64. ++a, ++b;
  65. return *a-*b;
  66. }