]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-strxcpyx.c
network: IPv6 Compliance RFC4862: Address Lifetime Expiry (Hosts Only) [v6LC.3.2.2]
[thirdparty/systemd.git] / src / test / test-strxcpyx.c
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
c62c294f 2
442ac269 3#include <stdio.h>
c62c294f 4
07630cea 5#include "string-util.h"
c62c294f 6#include "strxcpyx.h"
4f7452a8 7#include "tests.h"
c62c294f 8
4f7452a8 9TEST(strpcpy) {
c62c294f
TA
10 char target[25];
11 char *s = target;
12 size_t space_left;
648a799f 13 bool truncated;
c62c294f
TA
14
15 space_left = sizeof(target);
648a799f
YW
16 space_left = strpcpy_full(&s, space_left, "12345", &truncated);
17 assert_se(!truncated);
18 space_left = strpcpy_full(&s, space_left, "hey hey hey", &truncated);
19 assert_se(!truncated);
20 space_left = strpcpy_full(&s, space_left, "waldo", &truncated);
21 assert_se(!truncated);
22 space_left = strpcpy_full(&s, space_left, "ba", &truncated);
23 assert_se(!truncated);
24 space_left = strpcpy_full(&s, space_left, "r", &truncated);
25 assert_se(!truncated);
26 assert_se(space_left == 1);
c79e88b3 27 ASSERT_STREQ(target, "12345hey hey heywaldobar");
c62c294f 28
648a799f
YW
29 space_left = strpcpy_full(&s, space_left, "", &truncated);
30 assert_se(!truncated);
31 assert_se(space_left == 1);
c79e88b3 32 ASSERT_STREQ(target, "12345hey hey heywaldobar");
648a799f
YW
33
34 space_left = strpcpy_full(&s, space_left, "f", &truncated);
35 assert_se(truncated);
bdf7026e 36 assert_se(space_left == 0);
c79e88b3 37 ASSERT_STREQ(target, "12345hey hey heywaldobar");
648a799f
YW
38
39 space_left = strpcpy_full(&s, space_left, "", &truncated);
40 assert_se(!truncated);
41 assert_se(space_left == 0);
c79e88b3 42 ASSERT_STREQ(target, "12345hey hey heywaldobar");
648a799f
YW
43
44 space_left = strpcpy_full(&s, space_left, "foo", &truncated);
45 assert_se(truncated);
46 assert_se(space_left == 0);
c79e88b3 47 ASSERT_STREQ(target, "12345hey hey heywaldobar");
c62c294f
TA
48}
49
4f7452a8 50TEST(strpcpyf) {
c62c294f
TA
51 char target[25];
52 char *s = target;
53 size_t space_left;
648a799f 54 bool truncated;
c62c294f
TA
55
56 space_left = sizeof(target);
648a799f
YW
57 space_left = strpcpyf_full(&s, space_left, &truncated, "space left: %zu. ", space_left);
58 assert_se(!truncated);
59 space_left = strpcpyf_full(&s, space_left, &truncated, "foo%s", "bar");
60 assert_se(!truncated);
bdf7026e 61 assert_se(space_left == 3);
c79e88b3 62 ASSERT_STREQ(target, "space left: 25. foobar");
648a799f
YW
63
64 space_left = strpcpyf_full(&s, space_left, &truncated, "%i", 42);
65 assert_se(!truncated);
66 assert_se(space_left == 1);
c79e88b3 67 ASSERT_STREQ(target, "space left: 25. foobar42");
648a799f
YW
68
69 space_left = strpcpyf_full(&s, space_left, &truncated, "%s", "");
70 assert_se(!truncated);
71 assert_se(space_left == 1);
c79e88b3 72 ASSERT_STREQ(target, "space left: 25. foobar42");
648a799f
YW
73
74 space_left = strpcpyf_full(&s, space_left, &truncated, "%c", 'x');
75 assert_se(truncated);
76 assert_se(space_left == 0);
c79e88b3 77 ASSERT_STREQ(target, "space left: 25. foobar42");
648a799f
YW
78
79 space_left = strpcpyf_full(&s, space_left, &truncated, "%s", "");
80 assert_se(!truncated);
81 assert_se(space_left == 0);
c79e88b3 82 ASSERT_STREQ(target, "space left: 25. foobar42");
648a799f
YW
83
84 space_left = strpcpyf_full(&s, space_left, &truncated, "abc%s", "hoge");
85 assert_se(truncated);
86 assert_se(space_left == 0);
c79e88b3 87 ASSERT_STREQ(target, "space left: 25. foobar42");
54d46a78
ZJS
88
89 /* test overflow */
90 s = target;
648a799f
YW
91 space_left = strpcpyf_full(&s, 12, &truncated, "00 left: %i. ", 999);
92 assert_se(truncated);
c79e88b3 93 ASSERT_STREQ(target, "00 left: 99");
54d46a78
ZJS
94 assert_se(space_left == 0);
95 assert_se(target[12] == '2');
c62c294f
TA
96}
97
4f7452a8 98TEST(strpcpyl) {
c62c294f
TA
99 char target[25];
100 char *s = target;
101 size_t space_left;
648a799f 102 bool truncated;
c62c294f
TA
103
104 space_left = sizeof(target);
648a799f
YW
105 space_left = strpcpyl_full(&s, space_left, &truncated, "waldo", " test", " waldo. ", NULL);
106 assert_se(!truncated);
107 space_left = strpcpyl_full(&s, space_left, &truncated, "Banana", NULL);
108 assert_se(!truncated);
109 assert_se(space_left == 1);
c79e88b3 110 ASSERT_STREQ(target, "waldo test waldo. Banana");
648a799f
YW
111
112 space_left = strpcpyl_full(&s, space_left, &truncated, "", "", "", NULL);
113 assert_se(!truncated);
bdf7026e 114 assert_se(space_left == 1);
c79e88b3 115 ASSERT_STREQ(target, "waldo test waldo. Banana");
648a799f
YW
116
117 space_left = strpcpyl_full(&s, space_left, &truncated, "", "x", "", NULL);
118 assert_se(truncated);
119 assert_se(space_left == 0);
c79e88b3 120 ASSERT_STREQ(target, "waldo test waldo. Banana");
648a799f
YW
121
122 space_left = strpcpyl_full(&s, space_left, &truncated, "hoge", NULL);
123 assert_se(truncated);
124 assert_se(space_left == 0);
c79e88b3 125 ASSERT_STREQ(target, "waldo test waldo. Banana");
c62c294f
TA
126}
127
4f7452a8 128TEST(strscpy) {
c62c294f
TA
129 char target[25];
130 size_t space_left;
648a799f 131 bool truncated;
c62c294f
TA
132
133 space_left = sizeof(target);
648a799f
YW
134 space_left = strscpy_full(target, space_left, "12345", &truncated);
135 assert_se(!truncated);
c62c294f 136
c79e88b3 137 ASSERT_STREQ(target, "12345");
bdf7026e 138 assert_se(space_left == 20);
c62c294f
TA
139}
140
4f7452a8 141TEST(strscpyl) {
c62c294f
TA
142 char target[25];
143 size_t space_left;
648a799f 144 bool truncated;
c62c294f
TA
145
146 space_left = sizeof(target);
648a799f
YW
147 space_left = strscpyl_full(target, space_left, &truncated, "12345", "waldo", "waldo", NULL);
148 assert_se(!truncated);
c62c294f 149
c79e88b3 150 ASSERT_STREQ(target, "12345waldowaldo");
bdf7026e 151 assert_se(space_left == 10);
c62c294f
TA
152}
153
4f7452a8 154TEST(sd_event_code_migration) {
442ac269
YW
155 char b[100 * DECIMAL_STR_MAX(unsigned) + 1];
156 char c[100 * DECIMAL_STR_MAX(unsigned) + 1], *p;
157 unsigned i;
158 size_t l;
b798490f 159 int o, r;
442ac269 160
b798490f
LB
161 for (i = o = 0; i < 100; i++) {
162 r = snprintf(&b[o], sizeof(b) - o, "%u ", i);
163 assert_se(r >= 0 && r < (int) sizeof(b) - o);
164 o += r;
165 }
442ac269
YW
166
167 p = c;
168 l = sizeof(c);
169 for (i = 0; i < 100; i++)
170 l = strpcpyf(&p, l, "%u ", i);
171
c79e88b3 172 ASSERT_STREQ(b, c);
442ac269
YW
173}
174
4f7452a8 175DEFINE_TEST_MAIN(LOG_INFO);