Browse Source

feat(gblibc): add strndup, strdup

greatbridf 2 năm trước cách đây
mục cha
commit
f17738319d
2 tập tin đã thay đổi với 23 bổ sung0 xóa
  1. 3 0
      gblibc/include/string.h
  2. 20 0
      gblibc/src/string.c

+ 3 - 0
gblibc/include/string.h

@@ -38,6 +38,9 @@ char* strncpy(char* dst, const char* src, size_t n);
 char* stpcpy(char* dst, const char* src);
 char* stpncpy(char* dst, const char* src, size_t n);
 
+char* strdup(const char* str);
+char* strndup(const char* str, size_t n);
+
 #ifdef __cplusplus
 }
 #endif

+ 20 - 0
gblibc/src/string.c

@@ -1,6 +1,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include <stdint.h>
+#include <stdlib.h>
 
 #define BYTES_PER_MAX_COPY_UNIT (sizeof(uint32_t) / sizeof(uint8_t))
 
@@ -254,3 +255,22 @@ char* strerror(int errnum)
         return "No error information";
     }
 }
+
+char* strndup(const char* str, size_t n)
+{
+    size_t len = strlen(str);
+    if (len > n)
+        len = n;
+    char* ret = malloc(len + 1);
+    if (!ret)
+        return NULL;
+    
+    memcpy(ret, str, len);
+    ret[len] = 0;
+    return ret;
+}
+
+char* strdup(const char* str)
+{
+    return strndup(str, __SIZE_MAX__);
+}