From 658c1b9f68065a4e9ac7f1e28b3eedbba36c3099 Mon Sep 17 00:00:00 2001 From: Ori Bernstein Date: Thu, 17 Dec 2020 19:20:04 -0800 Subject: [PATCH] libap: add strndup strndup is part of POSIX.1, so APE should provide it. This patch adds it, so need to patch it out of fewer programs going forward. --- sys/include/ape/string.h | 1 + sys/src/ape/lib/ap/gen/strndup.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 sys/src/ape/lib/ap/gen/strndup.c diff --git a/sys/include/ape/string.h b/sys/include/ape/string.h index 50dfad93c..4c69206f7 100644 --- a/sys/include/ape/string.h +++ b/sys/include/ape/string.h @@ -19,6 +19,7 @@ extern int memcmp(const void *, const void *, size_t); extern int strcmp(const char *, const char *); extern int strcoll(const char *, const char *); extern char *strdup(char*); +extern char *strndup(char*, size_t); extern int strncmp(const char *, const char *, size_t); extern size_t strxfrm(char *, const char *, size_t); extern void *memchr(const void *, int, size_t); diff --git a/sys/src/ape/lib/ap/gen/strndup.c b/sys/src/ape/lib/ap/gen/strndup.c new file mode 100644 index 000000000..b60e2da2b --- /dev/null +++ b/sys/src/ape/lib/ap/gen/strndup.c @@ -0,0 +1,20 @@ +#include +#include +#include + +char* +strndup(char *p, size_t max) +{ + int n; + char *np; + + n = strlen(p)+1; + if(n > max) + n = max+1; + np = malloc(n); + if(!np) + return nil; + memmove(np, p, n); + np[n-1] = 0; + return np; +}