1 /* Tests for some interesting cases in non-standard strlcpy(). */
2
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <strings.h>
6
main(void)7 int main(void)
8 {
9 size_t copied;
10
11 char *src = malloc(100);
12 if (src == NULL) {
13 fprintf(stderr, "Memory allocation failure.\n");
14 return 1;
15 }
16 strcpy(src, "Hey, dude!");
17
18 char *dst = malloc(10);
19 if (dst == NULL) {
20 fprintf(stderr, "Memory allocation failure.\n");
21 return 1;
22 }
23
24 /* This is ok. */
25 copied = strlcpy(dst, src, 10);
26 if (copied != 10)
27 fprintf(stderr, "Expected 10 but got %zu for test #1.\n", copied);
28
29 /* Here dst is not large enough. */
30 copied = strlcpy(dst, src, strlen(src) + 1);
31 if (copied != 10)
32 fprintf(stderr, "Expected 10 but got %zu for test #2.\n", copied);
33
34 /* This is just a fancy way how to write strlen(src).
35 Undocumented but heavily used. */
36 copied = strlcpy(NULL, src, 0);
37 if (copied != 10)
38 fprintf(stderr, "Expected 10 but got %zu for test #3.\n", copied);
39
40 /* Source and destination overlap. */
41 strlcpy(src + 9, src, strlen(src) + 1);
42 /* Return value is not checked because function behaviour
43 is undefined in such case (and valgrind's differs). */
44
45 return 0;
46 }
47
48