istdup() performs the equivalent of strdup() on a `struct ist`. --- include/common/ist.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/include/common/ist.h b/include/common/ist.h index 4d75d8607..9614f957d 100644 --- a/include/common/ist.h +++ b/include/common/ist.h @@ -420,6 +420,23 @@ static inline ssize_t istscpy(struct ist *dst, const struct ist src, size_t coun return -1; } +/* This function performs the equivalent of strdup() on the given <src>. + * If this function fails to allocate memory an `ist` with `.ptr = NULL` and `.len = 0` + * is returned. + */ +static inline struct ist istdup(const struct ist src) +{ + const size_t alloc_size = src.len; + const char *alloc = malloc(alloc_size); + struct ist dst = ist2(alloc, 0); + + if (dst.ptr != NULL) { + istcpy(&dst, src, alloc_size); + } + + return dst; +} + /* appends <src> after <dst> for a maximum of <count> total bytes in <dst> after * the copy. <dst> is assumed to be <count> or less before the call. The new * string's length is returned, or -1 if a truncation happened. In all cases, -- 2.25.1