]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util: introduce strnpcpy() and strnscpy()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 30 Apr 2019 16:56:33 +0000 (18:56 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 30 May 2019 12:08:51 +0000 (21:08 +0900)
src/basic/strxcpyx.c
src/basic/strxcpyx.h

index 9210277cde53dba8187215c15bf1af065af59934..ef6d3fa32472b4e3d29e82058102a8a5112b66db 100644 (file)
 
 #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, ...) {
index 0f2b7499ba14ade91aff5595b5942842ce7747d8..9b6684124625e1ea1abb999d9af63276bed3122d 100644 (file)
@@ -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_;