]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: ist: Add `struct ist istdup(const struct ist)`
authorTim Duesterhus <tim@bastelstu.be>
Thu, 5 Mar 2020 16:56:34 +0000 (17:56 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 5 Mar 2020 18:53:12 +0000 (19:53 +0100)
istdup() performs the equivalent of strdup() on a `struct ist`.

include/common/ist.h

index db31544b4734a2cd24aca882903ffccc30ae2717..b19facd79adc4ca13849984d081447e3c3ed8782 100644 (file)
@@ -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 <src>.
+ *
+ * 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