]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/strxcpyx.c
dbbf7d08d21a92ae4c5559d5c83c983a2bcf088b
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 * Concatenates/copies strings. In any case, terminates in all cases
5 * with '\0' and moves the @dest pointer forward to the added '\0'.
6 * Returns the remaining size, and 0 if the string was truncated.
8 * Due to the intended usage, these helpers silently noop invocations
9 * having zero size. This is technically an exception to the above
10 * statement "terminates in all cases". It's unexpected for such calls to
11 * occur outside of a loop where this is the preferred behavior.
20 size_t strnpcpy(char **dest
, size_t size
, const char *src
, size_t len
) {
29 *dest
= mempcpy(*dest
, src
, size
-1);
32 *dest
= mempcpy(*dest
, src
, len
);
40 size_t strpcpy(char **dest
, size_t size
, const char *src
) {
44 return strnpcpy(dest
, size
, src
, strlen(src
));
47 size_t strpcpyf(char **dest
, size_t size
, const char *src
, ...) {
58 i
= vsnprintf(*dest
, size
, src
, va
);
68 size_t strpcpyl(char **dest
, size_t size
, const char *src
, ...) {
76 size
= strpcpy(dest
, size
, src
);
77 src
= va_arg(va
, char *);
83 size_t strnscpy(char *dest
, size_t size
, const char *src
, size_t len
) {
90 return strnpcpy(&s
, size
, src
, len
);
93 size_t strscpy(char *dest
, size_t size
, const char *src
) {
97 return strnscpy(dest
, size
, src
, strlen(src
));
100 size_t strscpyl(char *dest
, size_t size
, const char *src
, ...) {
110 size
= strpcpy(&s
, size
, src
);
111 src
= va_arg(va
, char *);