diff options
author | Daniel Lange <DLange@git.local> | 2021-09-21 08:35:19 +0200 |
---|---|---|
committer | Daniel Lange <DLange@git.local> | 2021-09-21 08:35:19 +0200 |
commit | 69f439eff387a6ecb52734e400b297a3c85f2285 (patch) | |
tree | 2a988b7868b749654796183ba70b4272965da1bf /XUtils.c | |
parent | c55320e9e2a8916e911bcd39ab37b79e3a7d03b2 (diff) | |
download | debian_htop-69f439eff387a6ecb52734e400b297a3c85f2285.tar.gz debian_htop-69f439eff387a6ecb52734e400b297a3c85f2285.tar.bz2 debian_htop-69f439eff387a6ecb52734e400b297a3c85f2285.zip |
New upstream version 3.1.0upstream/3.1.0
Diffstat (limited to 'XUtils.c')
-rw-r--r-- | XUtils.c | 42 |
1 files changed, 41 insertions, 1 deletions
@@ -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) { |