summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/include/string.h1
-rw-r--r--payloads/libpayload/libc/string.c19
2 files changed, 20 insertions, 0 deletions
diff --git a/payloads/libpayload/include/string.h b/payloads/libpayload/include/string.h
index 393881d9cc..e87dea5def 100644
--- a/payloads/libpayload/include/string.h
+++ b/payloads/libpayload/include/string.h
@@ -59,6 +59,7 @@ char *strcat(char *d, const char *s);
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strdup(const char *s);
+char *strndup(const char *s, size_t size);
char *strstr(const char *h, const char *n);
char *strsep(char **stringp, const char *delim);
size_t strspn(const char *s, const char *a);
diff --git a/payloads/libpayload/libc/string.c b/payloads/libpayload/libc/string.c
index 46c3c019bd..b3e1c8df0d 100644
--- a/payloads/libpayload/libc/string.c
+++ b/payloads/libpayload/libc/string.c
@@ -322,6 +322,25 @@ char *strdup(const char *s)
}
/**
+ * Duplicate a string with a max length of size
+ *
+ * @param s The string to duplicate.
+ * @param size The max length of the string
+ * @return A pointer to the copy of the original string.
+ */
+char *strndup(const char *s, size_t size)
+{
+ size_t n = strnlen(s, size);
+ char *p = malloc(n + 1);
+
+ if (p != NULL) {
+ strncpy(p, s, n);
+ p[n] = 0;
+ }
+ return p;
+}
+
+/**
* Find a substring within a string.
*
* @param h The haystack string.