From 81f7ee8a42317147e2bf3929017bd46e854ab82c Mon Sep 17 00:00:00 2001 From: Dagobert Michelsen Date: Tue, 25 Feb 2020 15:23:14 +0100 Subject: [PATCH] Add sstrndup to common.c --- src/utils/common/common.c | 22 ++++++++++++++++++++++ src/utils/common/common.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/utils/common/common.c b/src/utils/common/common.c index 2cebc0d5f..bf86ab28b 100644 --- a/src/utils/common/common.c +++ b/src/utils/common/common.c @@ -160,6 +160,28 @@ char *sstrdup(const char *s) { return r; } /* char *sstrdup */ +char *sstrndup(const char *s, size_t n) { + char *r; + size_t sz; + + if (s == NULL) + return NULL; + + sz = strlen(s); + if (sz > n) { + sz = n; + } + r = malloc(sz + 1); + if (r == NULL) { + ERROR("sstrndup: Out of memory."); + exit(3); + } + memcpy(r, s, sz); + r[sz] = '\0'; + + return r; +} /* char *sstrdup */ + /* Even though Posix requires "strerror_r" to return an "int", * some systems (e.g. the GNU libc) return a "char *" _and_ * ignore the second argument ... -tokkee */ diff --git a/src/utils/common/common.h b/src/utils/common/common.h index 4e2eceda7..7cd8c4c13 100644 --- a/src/utils/common/common.h +++ b/src/utils/common/common.h @@ -73,6 +73,7 @@ __attribute__((format(printf, 1, 2))) char *ssnprintf_alloc(char const *format, ...); char *sstrdup(const char *s); +char *sstrndup(const char *s, size_t n); void *smalloc(size_t size); char *sstrerror(int errnum, char *buf, size_t buflen); -- 2.47.2