aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libspl/Makefile.am3
-rw-r--r--lib/libspl/include/string.h53
-rw-r--r--lib/libspl/strlcat.c56
-rw-r--r--lib/libspl/strlcpy.c52
-rw-r--r--lib/libspl/strnlen.c44
-rw-r--r--tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c8
6 files changed, 54 insertions, 162 deletions
diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am
index b7fa795d5..8d0d4d038 100644
--- a/lib/libspl/Makefile.am
+++ b/lib/libspl/Makefile.am
@@ -22,9 +22,6 @@ USER_C = \
list.c \
mkdirp.c \
page.c \
- strlcat.c \
- strlcpy.c \
- strnlen.c \
timestamp.c \
zone.c \
include/sys/list.h \
diff --git a/lib/libspl/include/string.h b/lib/libspl/include/string.h
index 9e5133e0e..8908ce228 100644
--- a/lib/libspl/include/string.h
+++ b/lib/libspl/include/string.h
@@ -28,9 +28,56 @@
#define _LIBSPL_STRING_H
#include_next <string.h>
+#include <sys/types.h>
-extern size_t strlcat(char *dst, const char *src, size_t dstsize);
-extern size_t strlcpy(char *dst, const char *src, size_t len);
-extern size_t strnlen(const char *str, size_t maxlen);
+/*
+ * Appends src to the dstsize buffer at dst. The append will never
+ * overflow the destination buffer and the buffer will always be null
+ * terminated. Never reference beyond &dst[dstsize-1] when computing
+ * the length of the pre-existing string.
+ */
+static inline size_t
+strlcat(char *dst, const char *src, size_t dstsize)
+{
+ char *df = dst;
+ size_t left = dstsize;
+ size_t l1;
+ size_t l2 = strlen(src);
+ size_t copied;
+
+ while (left-- != 0 && *df != '\0')
+ df++;
+
+ l1 = df - dst;
+
+ if (dstsize == l1)
+ return (l1 + l2);
+
+ copied = l1 + l2 >= dstsize ? dstsize - l1 - 1 : l2;
+ (void) memcpy(dst + l1, src, copied);
+ dst[l1+copied] = '\0';
+
+ return (l1 + l2);
+}
+
+/*
+ * Copies src to the dstsize buffer at dst. The copy will never
+ * overflow the destination buffer and the buffer will always be null
+ * terminated.
+ */
+static inline size_t
+strlcpy(char *dst, const char *src, size_t len)
+{
+ size_t slen = strlen(src);
+
+ if (len == 0)
+ return (slen);
+
+ size_t copied = (slen >= len) ? len - 1 : slen;
+ (void) memcpy(dst, src, copied);
+ dst[copied] = '\0';
+
+ return (slen);
+}
#endif
diff --git a/lib/libspl/strlcat.c b/lib/libspl/strlcat.c
deleted file mode 100644
index a001df7b1..000000000
--- a/lib/libspl/strlcat.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <string.h>
-#include <sys/types.h>
-
-/*
- * Appends src to the dstsize buffer at dst. The append will never
- * overflow the destination buffer and the buffer will always be null
- * terminated. Never reference beyond &dst[dstsize-1] when computing
- * the length of the pre-existing string.
- */
-
-size_t
-strlcat(char *dst, const char *src, size_t dstsize)
-{
- char *df = dst;
- size_t left = dstsize;
- size_t l1;
- size_t l2 = strlen(src);
- size_t copied;
-
- while (left-- != 0 && *df != '\0')
- df++;
- l1 = df - dst;
- if (dstsize == l1)
- return (l1 + l2);
-
- copied = l1 + l2 >= dstsize ? dstsize - l1 - 1 : l2;
- (void) memcpy(dst + l1, src, copied);
- dst[l1+copied] = '\0';
- return (l1 + l2);
-}
diff --git a/lib/libspl/strlcpy.c b/lib/libspl/strlcpy.c
deleted file mode 100644
index 2d0daae05..000000000
--- a/lib/libspl/strlcpy.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <string.h>
-#include <sys/types.h>
-
-/*
- * Copies src to the dstsize buffer at dst. The copy will never
- * overflow the destination buffer and the buffer will always be null
- * terminated.
- */
-
-size_t
-strlcpy(char *dst, const char *src, size_t len)
-{
- size_t slen = strlen(src);
- size_t copied;
-
- if (len == 0)
- return (slen);
-
- if (slen >= len)
- copied = len - 1;
- else
- copied = slen;
- (void) memcpy(dst, src, copied);
- dst[copied] = '\0';
- return (slen);
-}
diff --git a/lib/libspl/strnlen.c b/lib/libspl/strnlen.c
deleted file mode 100644
index 9fb8227b9..000000000
--- a/lib/libspl/strnlen.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2008 Sun Microsystems, Inc.
- * All rights reserved. Use is subject to license terms.
- */
-
-#include <string.h>
-#include <sys/types.h>
-
-/*
- * Returns the number of non-NULL bytes in string argument,
- * but not more than maxlen. Does not look past str + maxlen.
- */
-size_t
-strnlen(const char *str, size_t maxlen)
-{
- const char *ptr;
-
- ptr = memchr(str, 0, maxlen);
- if (ptr == NULL)
- return (maxlen);
-
- return (ptr - str);
-}
diff --git a/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c b/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
index 64066d419..3d5c7b64a 100644
--- a/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
+++ b/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
@@ -147,7 +147,7 @@ lzc_ioctl_run(zfs_ioc_t ioc, const char *name, nvlist_t *innvl, int expected)
}
packed = fnvlist_pack(innvl, &size);
- (void) strncpy(zc.zc_name, name, sizeof (zc.zc_name));
+ (void) strlcpy(zc.zc_name, name, sizeof (zc.zc_name));
zc.zc_name[sizeof (zc.zc_name) - 1] = '\0';
zc.zc_nvlist_src = (uint64_t)(uintptr_t)packed;
zc.zc_nvlist_src_size = size;
@@ -234,7 +234,7 @@ lzc_ioctl_test(zfs_ioc_t ioc, const char *name, nvlist_t *required,
char pname[MAXNAMELEN];
data_type_t ptype;
- strncpy(pname, nvpair_name(pair), sizeof (pname));
+ strlcpy(pname, nvpair_name(pair), sizeof (pname));
pname[sizeof (pname) - 1] = '\0';
ptype = nvpair_type(pair);
fnvlist_remove_nvpair(input, pair);
@@ -648,7 +648,7 @@ zfs_destroy(const char *dataset)
zfs_cmd_t zc = {"\0"};
int err;
- (void) strncpy(zc.zc_name, dataset, sizeof (zc.zc_name));
+ (void) strlcpy(zc.zc_name, dataset, sizeof (zc.zc_name));
zc.zc_name[sizeof (zc.zc_name) - 1] = '\0';
zc.zc_objset_type = DMU_OST_ZFS;
err = ioctl(zfs_fd, ZFS_IOC_DESTROY, &zc);
@@ -760,7 +760,7 @@ zfs_ioc_input_tests(const char *pool)
ioc_tested[ioc_skip[i] - ZFS_IOC_FIRST] = B_TRUE;
}
- (void) strncpy(zc.zc_name, pool, sizeof (zc.zc_name));
+ (void) strlcpy(zc.zc_name, pool, sizeof (zc.zc_name));
zc.zc_name[sizeof (zc.zc_name) - 1] = '\0';
for (unsigned ioc = ZFS_IOC_FIRST; ioc < ZFS_IOC_LAST; ioc++) {