diff options
-rw-r--r-- | xmalloc.c | 12 | ||||
-rw-r--r-- | xmalloc.h | 6 |
2 files changed, 18 insertions, 0 deletions
@@ -69,4 +69,16 @@ char *strdup(const char *s) } #endif /* !HAVE_STRDUP */ +char *xstrndup(const char *s, size_t len) +{ + char *p; + size_t l = strlen(s); + + if (len < l) l = len; + p = (char *)xmalloc(l + 1); + memcpy(p, s, l); + p[l] = '\0'; + return p; +} + /* xmalloc.c ends here */ @@ -25,4 +25,10 @@ XMALLOCTYPE *xrealloc(/*@null@*/ XMALLOCTYPE *, size_t n); * pointer, abort program on failure. */ char *xstrdup(const char *src); +/** Duplicate at most the first \a n characters from \a src to a newly + * malloc()d memory region and NUL-terminate it, and return its pointer, abort + * program on failure. The memory size is the lesser of either the string + * length including NUL byte or n + 1. */ +char *xstrndup(const char *src, size_t n); + #endif |