aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2025-12-03 23:56:26 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2025-12-16 04:57:01 +0000
commitb2e649a0b98d110aa70c2d2d6cab919b9dd8e9af (patch)
tree7fe35148c6f4ffa7a736fcae9d4b00af8c485456 /lib
parent477c4645bbcc4dce0e88587ffa6b583c6ff6899f (diff)
libc/string: add strdupa(3) and strndupa(3)
(cherry picked from commit a98e5d78500193dc7aa352e1f60ac2c6529e2c38)
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/string/Makefile.inc4
-rw-r--r--lib/libc/string/strdup.334
2 files changed, 36 insertions, 2 deletions
diff --git a/lib/libc/string/Makefile.inc b/lib/libc/string/Makefile.inc
index 13cff22b9a32..dfe4b4b55bec 100644
--- a/lib/libc/string/Makefile.inc
+++ b/lib/libc/string/Makefile.inc
@@ -174,7 +174,9 @@ MLINKS+=strcoll.3 strcoll_l.3
MLINKS+=strcpy.3 stpcpy.3 \
strcpy.3 stpncpy.3 \
strcpy.3 strncpy.3
-MLINKS+=strdup.3 strndup.3
+MLINKS+=strdup.3 strndup.3 \
+ strdup.3 strdupa.3 \
+ strdup.3 strndupa.3
MLINKS+=strerror.3 perror.3 \
strerror.3 strerror_l.3 \
strerror.3 strerror_r.3 \
diff --git a/lib/libc/string/strdup.3 b/lib/libc/string/strdup.3
index 576fa122b8d6..5968289f5002 100644
--- a/lib/libc/string/strdup.3
+++ b/lib/libc/string/strdup.3
@@ -30,7 +30,9 @@
.Os
.Sh NAME
.Nm strdup ,
-.Nm strndup
+.Nm strdupa ,
+.Nm strndup ,
+.Nm strndupa
.Nd save a copy of a string
.Sh LIBRARY
.Lb libc
@@ -39,7 +41,11 @@
.Ft char *
.Fn strdup "const char *str"
.Ft char *
+.Fn strdupa "const char *str"
+.Ft char *
.Fn strndup "const char *str" "size_t len"
+.Ft char *
+.Fn strndupa "const char *str" "size_t len"
.Sh DESCRIPTION
The
.Fn strdup
@@ -63,6 +69,19 @@ characters from the string
always
.Dv NUL
terminating the copied string.
+.Pp
+The
+.Fn strdupa
+function is identical to
+.Fn strdup
+but allocates the memory with
+.Xr alloca 3 .
+Similarly, the
+.Fn strndupa
+function is identical to
+.Fn strndup ,
+but allocates the memory with
+.Xr alloca 3 .
.Sh RETURN VALUES
If insufficient memory is available, NULL is returned and
.Va errno
@@ -72,6 +91,7 @@ Otherwise, the
.Fn strdup
family of functions return a pointer to the copied string.
.Sh SEE ALSO
+.Xr alloca 3 ,
.Xr free 3 ,
.Xr malloc 3 ,
.Xr wcsdup 3
@@ -84,6 +104,12 @@ The
.Fn strndup
function is specified by
.St -p1003.1-2008 .
+The
+.Fn strdupa
+and
+.Fn strndupa
+functions are extensions,
+taken from glibc.
.Sh HISTORY
The
.Fn strdup
@@ -93,3 +119,9 @@ The
.Fn strndup
function was added in
.Fx 7.2 .
+The
+.Fn strdupa
+and
+.Fn strndupa
+functions were added in
+.Fx 15.1 .