From 69f439eff387a6ecb52734e400b297a3c85f2285 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Tue, 21 Sep 2021 08:35:19 +0200 Subject: New upstream version 3.1.0 --- XUtils.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'XUtils.c') diff --git a/XUtils.c b/XUtils.c index 01f3342..c589d78 100644 --- a/XUtils.c +++ b/XUtils.c @@ -78,6 +78,26 @@ void* xReallocArray(void* ptr, size_t nmemb, size_t size) { return xRealloc(ptr, nmemb * size); } +void* xReallocArrayZero(void* ptr, size_t prevmemb, size_t newmemb, size_t size) { + assert((ptr == NULL) == (prevmemb == 0)); + + if (prevmemb == newmemb) { + return ptr; + } + + void* ret = xReallocArray(ptr, newmemb, size); + + if (newmemb > prevmemb) { + memset((unsigned char*)ret + prevmemb * size, '\0', (newmemb - prevmemb) * size); + } + + return ret; +} + +inline bool String_contains_i(const char* s1, const char* s2) { + return strcasestr(s1, s2) != NULL; +} + char* String_cat(const char* s1, const char* s2) { const size_t l1 = strlen(s1); const size_t l2 = strlen(s2); @@ -173,7 +193,7 @@ char* String_readLine(FILE* fd) { char* buffer = xMalloc(step + 1); char* at = buffer; for (;;) { - char* ok = fgets(at, step + 1, fd); + const char* ok = fgets(at, step + 1, fd); if (!ok) { free(buffer); return NULL; @@ -193,6 +213,18 @@ char* String_readLine(FILE* fd) { } } +size_t String_safeStrncpy(char* restrict dest, const char* restrict src, size_t size) { + assert(size > 0); + + size_t i = 0; + for (; i < size - 1 && src[i]; i++) + dest[i] = src[i]; + + dest[i] = '\0'; + + return i; +} + int xAsprintf(char** strp, const char* fmt, ...) { va_list vl; va_start(vl, fmt); @@ -227,6 +259,14 @@ char* xStrdup(const char* str) { return data; } +void free_and_xStrdup(char** ptr, const char* str) { + if (*ptr && String_eq(*ptr, str)) + return; + + free(*ptr); + *ptr = xStrdup(str); +} + char* xStrndup(const char* str, size_t len) { char* data = strndup(str, len); if (!data) { -- cgit v1.2.3