aboutsummaryrefslogtreecommitdiff
path: root/docs/ref/api
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ref/api')
-rw-r--r--docs/ref/api/util/index.md1
-rw-r--r--docs/ref/api/util/nng_strdup.md54
2 files changed, 55 insertions, 0 deletions
diff --git a/docs/ref/api/util/index.md b/docs/ref/api/util/index.md
index eeb13906..1f202c0f 100644
--- a/docs/ref/api/util/index.md
+++ b/docs/ref/api/util/index.md
@@ -10,5 +10,6 @@ of other uses.
- [nng_id_map](nng_id_map.md)
- [nng_msleep](nng_msleep.md)
- [nng_random](nng_random.md)
+- [nng_strdup](nng_strdup.md)
- [nng_strerror](nng_strerror.md)
- [nng_version](nng_version.md)
diff --git a/docs/ref/api/util/nng_strdup.md b/docs/ref/api/util/nng_strdup.md
new file mode 100644
index 00000000..32d3fba2
--- /dev/null
+++ b/docs/ref/api/util/nng_strdup.md
@@ -0,0 +1,54 @@
+# nng_strdup
+
+## NAME
+
+nng_strdup --- duplicate string
+
+## SYNOPSIS
+
+```c
+#include <nng/nng.h>
+
+char *nng_strdup(const char *src);
+void nng_strfree(char *str);
+```
+
+## DESCRIPTION
+
+The {{i:`nng_strdup`}} duplicates the string _src_ and returns it.
+
+This is logically equivalent to using [`nng_alloc`][nng_alloc]
+to allocate a region of memory of `strlen(s) + 1` bytes, and then
+using `strcpy` to copy the string into the destination before
+returning it.
+
+The returned string should be deallocated with
+{{i:`nng_strfree`}}, or may be deallocated using the
+[`nng_free`][nng_free] using the length of the returned string plus
+one (for the `NUL` terminating byte).
+
+> [!IMPORTANT]
+> Do not use the system `free` or similar functions to deallocate
+> the string, since those may use a different memory arena!
+
+> [!IMPORTANT]
+> If a string created with
+> `nng_strdup` is modified to be shorter, then it is incorrect to free it with `nng_strfree`.
+> (The [`nng_free`][nng_free] function can be used instead in that
+> case, using the length of the original string plus one to account for the `NUL` byte, for the size.)
+
+## RETURN VALUES
+
+The `nng_strdup` function returns the new string on success, and `NULL` on failure.
+
+## ERRORS
+
+No errors are returned from `nng_strdup`, but a `NULL` return value should be
+treated the same as `NNG_ENOMEM`.
+
+## SEE ALSO
+
+[nng_alloc][nng_alloc]
+
+[nng_alloc]: ../util/nng_alloc.md
+[nng_free]: ../util/nng_alloc.md