From: Tim Duesterhus Date: Thu, 5 Mar 2020 16:56:34 +0000 (+0100) Subject: MINOR: ist: Add `struct ist istdup(const struct ist)` X-Git-Tag: v2.2-dev4~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9576ab76403f89e402062fd71e3a6dd1a385559f;p=thirdparty%2Fhaproxy.git MINOR: ist: Add `struct ist istdup(const struct ist)` istdup() performs the equivalent of strdup() on a `struct ist`. --- diff --git a/include/common/ist.h b/include/common/ist.h index db31544b47..b19facd79a 100644 --- a/include/common/ist.h +++ b/include/common/ist.h @@ -756,6 +756,27 @@ static inline void istfree(struct ist *ist) free(ist->ptr); *ist = IST_NULL; } + +/* This function performs the equivalent of strdup() on the given . + * + * If this function fails to allocate memory the return value is equivalent + * to IST_NULL. + */ +static inline struct ist istdup(const struct ist src) +{ + const size_t src_size = src.len; + + /* Allocate at least 1 byte to allow duplicating an empty string with + * malloc implementations that return NULL for a 0-size allocation. + */ + struct ist dst = istalloc(MAX(src_size, 1)); + + if (isttest(dst)) { + istcpy(&dst, src, src_size); + } + + return dst; +} #endif #endif