/dongle/firmware/Projects/Versaloon/GCC/compiler_string.c

https://bitbucket.org/monami_ya/versaloon · C · 123 lines · 98 code · 25 blank · 0 comment · 29 complexity · 72e8bc30c9e5d58638e860416fc683b4 MD5 · raw file

  1. #include "app_cfg.h"
  2. #include <stdlib.h>
  3. #ifndef USE_BUILDIN_STRING_H
  4. int strlen(const char *str)
  5. {
  6. const char *p = str;
  7. while (*p)p++;
  8. return (int)(p - str);
  9. }
  10. int strcmp(const char *str0, const char *str1)
  11. {
  12. for (; *str0 && *str1 && *str0 == *str1; str0++, str1++);
  13. return (*str0 - *str1);
  14. }
  15. char* strcpy(char *dest, const char *source)
  16. {
  17. char *p = dest;
  18. if (*source)
  19. {
  20. while ((*p++ = *source++));
  21. *p = '\0';
  22. }
  23. return dest;
  24. }
  25. char* strncpy(char *dest, const char *source, int len)
  26. {
  27. char *p = dest;
  28. if (*source)
  29. {
  30. while (len-- && (*p++ = *source++));
  31. *p = '\0';
  32. }
  33. return dest;
  34. }
  35. char* strchr(const char *str, int c)
  36. {
  37. while (*str && *str != (char)c) str++;
  38. return (*str == (char)c) ? (char *)str : (char *)NULL;
  39. }
  40. char* strstr(const char *str, const char *substr)
  41. {
  42. char *pstr, *psub;
  43. if (!*substr)
  44. return (char *)NULL;
  45. while (*str)
  46. {
  47. pstr = (char *)str;
  48. psub = (char *)substr;
  49. do {
  50. if (!*psub) return pstr;
  51. } while (*pstr++ == *psub++);
  52. str++;
  53. }
  54. return (char *)NULL;
  55. }
  56. char* strcat(char *dest, const char *source)
  57. {
  58. char *p = dest;
  59. while (*p)p++;
  60. while ((*p++ = *source++));
  61. return dest;
  62. }
  63. char* strncat(char *dest, const char *source, int len)
  64. {
  65. char *p = dest;
  66. while (*p)p++;
  67. while (len-- && (*p++ = *source++));
  68. return dest;
  69. }
  70. char* strdup(const char *source)
  71. {
  72. char *p = (char *)malloc(strlen(source) + 1);
  73. return strcpy(p, source);
  74. }
  75. void* memcpy(void *dest, const void *source, int len)
  76. {
  77. char *p = dest;
  78. while(len--)
  79. *(char*)p++ = *(char*)source++;
  80. return dest;
  81. }
  82. int memcmp(const void *m0, const void *m1, int len)
  83. {
  84. const char *u8_0 = (const char *)m0;
  85. const char *u8_1 = (const char *)m1;
  86. for (; len > 0; ++u8_0, ++u8_1, --len)
  87. if (*u8_0 != *u8_1)
  88. return (*u8_0 - *u8_1);
  89. return 0;
  90. }
  91. void *memset(void *m, int c, int len)
  92. {
  93. char *p = (char *)m;
  94. for (; len > 0; len--)
  95. *p++ = (char)c;
  96. return m;
  97. }
  98. #endif