]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add talloc bstrdup
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 7 May 2020 19:04:19 +0000 (14:04 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 7 May 2020 19:23:33 +0000 (14:23 -0500)
src/lib/util/talloc.c
src/lib/util/talloc.h

index d72e7ed56396d1fb4b99d6ea0a5f29525eb66aa8..b7b8c4bfc09852a88b0daa9744772472d2b587dc 100644 (file)
@@ -311,6 +311,30 @@ char *talloc_typed_vasprintf(TALLOC_CTX *ctx, char const *fmt, va_list ap)
        return n;
 }
 
+/** Binary safe strdup function
+ *
+ * @param[in] ctx      he talloc context to allocate new buffer in.
+ * @param[in] in       String to dup, may contain embedded '\0'.
+ * @return duped string.
+ */
+char *talloc_bstrdup(TALLOC_CTX *ctx, char const *in)
+{
+       char    *p;
+       size_t  len = talloc_array_length(in);
+
+       if (len == 0) len = 1;
+
+       p = talloc_array(ctx, char, len);
+       if (!p) return NULL;
+
+       /*
+        * C99 (7.21.1/2) - Length zero results in noop
+        */
+       memcpy(p, in, len - 1);
+       p[len] = '\0';
+
+       return p;
+}
 
 /** Binary safe strndup function
  *
index 779f497b2e0fd8b840d1a3c475d58eb9e37ddd35..4946a4723bd820af91c7b7bc9201ea71bea4900c 100644 (file)
@@ -101,6 +101,8 @@ char                *talloc_typed_asprintf(TALLOC_CTX *ctx, char const *fmt, ...) CC_HINT(form
 
 char           *talloc_typed_vasprintf(TALLOC_CTX *ctx, char const *fmt, va_list ap) CC_HINT(format (printf, 2, 0)) CC_HINT(nonnull (2));
 
+char           *talloc_bstrdup(TALLOC_CTX *ctx, char const *in);
+
 char           *talloc_bstrndup(TALLOC_CTX *ctx, char const *in, size_t inlen);
 
 char           *talloc_bstr_append(TALLOC_CTX *ctx, char *to, char const *from, size_t from_len);