|
@@ -2,6 +2,25 @@
|
|
|
|
|
|
#define BYTES_PER_MAX_COPY_UNIT (sizeof(uint32_t) / sizeof(uint8_t))
|
|
|
|
|
|
+int memcmp(const void* ptr1, const void* ptr2, size_t num)
|
|
|
+{
|
|
|
+ while (num--) {
|
|
|
+ if (*(const char*)ptr1 < *(const char*)ptr2)
|
|
|
+ return -1;
|
|
|
+ else if (*(const char*)ptr1 > *(const char*)ptr2)
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+void* memmove(void* dst, const void* src, size_t n)
|
|
|
+{
|
|
|
+ void* orig_dst = dst;
|
|
|
+ while (n--)
|
|
|
+ *(char*)(dst++) = *(const char*)(src++);
|
|
|
+ return orig_dst;
|
|
|
+}
|
|
|
+
|
|
|
void* memcpy(void* _dst, const void* _src, size_t n)
|
|
|
{
|
|
|
void* orig_dst = _dst;
|
|
@@ -18,6 +37,11 @@ void* memcpy(void* _dst, const void* _src, size_t n)
|
|
|
return orig_dst;
|
|
|
}
|
|
|
|
|
|
+void* mempcpy(void* dst, const void* src, size_t n)
|
|
|
+{
|
|
|
+ return memcpy(dst, src, n) + n;
|
|
|
+}
|
|
|
+
|
|
|
void* memset(void* _dst, int c, size_t n)
|
|
|
{
|
|
|
uint8_t* dst = (uint8_t*)_dst;
|
|
@@ -41,6 +65,41 @@ size_t strlen(const char* str)
|
|
|
return n;
|
|
|
}
|
|
|
|
|
|
+char* strchr(const char* str, int c)
|
|
|
+{
|
|
|
+ const char* p = str;
|
|
|
+ while (*p) {
|
|
|
+ if (*p == c)
|
|
|
+ return (char*)p;
|
|
|
+ ++p;
|
|
|
+ }
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+char* strrchr(const char* str, int c)
|
|
|
+{
|
|
|
+ const char* p = str + strlen(str) - 1;
|
|
|
+ while (p >= str) {
|
|
|
+ if (*p == c)
|
|
|
+ return (char*)p;
|
|
|
+ --p;
|
|
|
+ }
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+char* strchrnul(const char* str, int c)
|
|
|
+{
|
|
|
+ char* ret = strchr(str, c);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ return (char*)str + strlen(str);
|
|
|
+}
|
|
|
+
|
|
|
+char* strcpy(char* dst, const char* src)
|
|
|
+{
|
|
|
+ return memcpy(dst, src, strlen(src) + 1);
|
|
|
+}
|
|
|
+
|
|
|
char* strncpy(char* dst, const char* src, size_t n)
|
|
|
{
|
|
|
size_t len = strlen(src);
|
|
@@ -55,6 +114,25 @@ char* strncpy(char* dst, const char* src, size_t n)
|
|
|
return dst;
|
|
|
}
|
|
|
|
|
|
+char* stpcpy(char* restrict dst, const char* restrict src)
|
|
|
+{
|
|
|
+ return memcpy(dst, src, strlen(src) + 1) + strlen(src);
|
|
|
+}
|
|
|
+
|
|
|
+char* stpncpy(char* restrict dst, const char* restrict src, size_t n)
|
|
|
+{
|
|
|
+ size_t len = strlen(src);
|
|
|
+
|
|
|
+ if (len < n) {
|
|
|
+ memset(dst + len, 0x00, n - len);
|
|
|
+ memcpy(dst, src, len);
|
|
|
+ } else {
|
|
|
+ memcpy(dst, src, n);
|
|
|
+ }
|
|
|
+
|
|
|
+ return dst + len;
|
|
|
+}
|
|
|
+
|
|
|
int strcmp(const char* s1, const char* s2)
|
|
|
{
|
|
|
int c;
|