]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/strxcpyx.c
2 This file is part of systemd.
4 Copyright 2013 Kay Sievers
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
21 * Concatenates/copies strings. In any case, terminates in all cases
22 * with '\0' * and moves the @dest pointer forward to the added '\0'.
23 * Returns the * remaining size, and 0 if the string was truncated.
32 size_t strpcpy(char **dest
, size_t size
, const char *src
) {
38 *dest
= mempcpy(*dest
, src
, size
-1);
42 *dest
= mempcpy(*dest
, src
, len
);
50 size_t strpcpyf(char **dest
, size_t size
, const char *src
, ...) {
55 i
= vsnprintf(*dest
, size
, src
, va
);
68 size_t strpcpyl(char **dest
, size_t size
, const char *src
, ...) {
73 size
= strpcpy(dest
, size
, src
);
74 src
= va_arg(va
, char *);
75 } while (src
!= NULL
);
80 size_t strscpy(char *dest
, size_t size
, const char *src
) {
84 return strpcpy(&s
, size
, src
);
87 size_t strscpyl(char *dest
, size_t size
, const char *src
, ...) {
94 size
= strpcpy(&s
, size
, src
);
95 src
= va_arg(va
, char *);
96 } while (src
!= NULL
);