summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2021-09-10 15:09:42 +0200
committerBenBE <BenBE@geshi.org>2021-09-11 00:04:00 +0200
commitbf395e10c52094c44b1a6e0b7fedc35c35de0641 (patch)
tree6fc0e58e1a31c5c34f8e372b05e449fb2d170070
parent8f259bc5e1b9a6a95c16b971cf4733cf76725c96 (diff)
Add xReallocArrayZero() helper
Add helper function to reallocate an dynamic allocated array including zeroing the newly allocated memory.
-rw-r--r--XUtils.c16
-rw-r--r--XUtils.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/XUtils.c b/XUtils.c
index 13327e0f..c589d780 100644
--- a/XUtils.c
+++ b/XUtils.c
@@ -78,6 +78,22 @@ 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;
}
diff --git a/XUtils.h b/XUtils.h
index 8a6ee37e..13f4be4b 100644
--- a/XUtils.h
+++ b/XUtils.h
@@ -30,6 +30,8 @@ void* xRealloc(void* ptr, size_t size) ATTR_ALLOC_SIZE1(2);
void* xReallocArray(void* ptr, size_t nmemb, size_t size) ATTR_ALLOC_SIZE2(2, 3);
+void* xReallocArrayZero(void* ptr, size_t prevmemb, size_t newmemb, size_t size) ATTR_ALLOC_SIZE2(3, 4);
+
/*
* String_startsWith gives better performance if strlen(match) can be computed
* at compile time (e.g. when they are immutable string literals). :)

© 2014-2024 Faster IT GmbH | imprint | privacy policy