summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-04-30 18:56:33 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-05-30 21:08:51 +0900
commit7e4831d2963e9c239e91cae45a3409b039f003cf (patch)
tree7aa69977128cff99a124ec78bd4db18e26751e07
parent961189af2a6969bddae4d3759defff5027b5701a (diff)
downloadsystemd-7e4831d2963e9c239e91cae45a3409b039f003cf.tar.gz
util: introduce strnpcpy() and strnscpy()
-rw-r--r--src/basic/strxcpyx.c23
-rw-r--r--src/basic/strxcpyx.h2
2 files changed, 19 insertions, 6 deletions
diff --git a/src/basic/strxcpyx.c b/src/basic/strxcpyx.c
index 9210277cde..ef6d3fa324 100644
--- a/src/basic/strxcpyx.c
+++ b/src/basic/strxcpyx.c
@@ -17,16 +17,13 @@
#include "strxcpyx.h"
-size_t strpcpy(char **dest, size_t size, const char *src) {
- size_t len;
-
+size_t strnpcpy(char **dest, size_t size, const char *src, size_t len) {
assert(dest);
assert(src);
if (size == 0)
return 0;
- len = strlen(src);
if (len >= size) {
if (size > 1)
*dest = mempcpy(*dest, src, size-1);
@@ -40,6 +37,13 @@ size_t strpcpy(char **dest, size_t size, const char *src) {
return size;
}
+size_t strpcpy(char **dest, size_t size, const char *src) {
+ assert(dest);
+ assert(src);
+
+ return strnpcpy(dest, size, src, strlen(src));
+}
+
size_t strpcpyf(char **dest, size_t size, const char *src, ...) {
va_list va;
int i;
@@ -76,14 +80,21 @@ size_t strpcpyl(char **dest, size_t size, const char *src, ...) {
return size;
}
-size_t strscpy(char *dest, size_t size, const char *src) {
+size_t strnscpy(char *dest, size_t size, const char *src, size_t len) {
char *s;
assert(dest);
assert(src);
s = dest;
- return strpcpy(&s, size, src);
+ return strnpcpy(&s, size, src, len);
+}
+
+size_t strscpy(char *dest, size_t size, const char *src) {
+ assert(dest);
+ assert(src);
+
+ return strnscpy(dest, size, src, strlen(src));
}
size_t strscpyl(char *dest, size_t size, const char *src, ...) {
diff --git a/src/basic/strxcpyx.h b/src/basic/strxcpyx.h
index 0f2b7499ba..9b66841246 100644
--- a/src/basic/strxcpyx.h
+++ b/src/basic/strxcpyx.h
@@ -5,8 +5,10 @@
#include "macro.h"
+size_t strnpcpy(char **dest, size_t size, const char *src, size_t len);
size_t strpcpy(char **dest, size_t size, const char *src);
size_t strpcpyf(char **dest, size_t size, const char *src, ...) _printf_(3, 4);
size_t strpcpyl(char **dest, size_t size, const char *src, ...) _sentinel_;
+size_t strnscpy(char *dest, size_t size, const char *src, size_t len);
size_t strscpy(char *dest, size_t size, const char *src);
size_t strscpyl(char *dest, size_t size, const char *src, ...) _sentinel_;