s390x-linux also has memfd_secret, syswrap it
[valgrind.git] / memcheck / tests / memmem.c
blob7cefafcc6525bf239d2f4dfc9cdf6a7bbcd4213c
1 #define _GNU_SOURCE
2 #include <assert.h>
3 #include <string.h>
4 #include <stdlib.h>
6 /* mallocs an mem block and fills it with A. A needs to be a zero
7 terminated string. The A string chars, minus the terminating zero
8 are copied into the returned mem block. */
9 static void *
10 create_mem (const char *a)
12 size_t len = strlen (a);
13 void *mem = malloc (len);
14 memcpy (mem, a, len);
15 return mem;
18 int
19 main ()
21 char *haystack;
22 char *needle;
24 haystack = create_mem ("a");
25 needle = create_mem ("a");
26 assert (memmem (haystack, 0, needle, 0) == haystack);
27 assert (memmem (haystack, 1, needle, 0) == haystack);
28 assert (memmem (haystack, 0, needle, 1) == NULL);
29 assert (memmem (haystack, 1, needle, 1) == haystack);
30 free (haystack);
31 free (needle);
33 haystack = create_mem ("abc");
34 needle = create_mem ("bc");
35 assert (memmem (haystack, 3, needle, 0) == haystack);
36 assert (memmem (haystack, 3, needle, 2) == haystack + 1);
37 assert (memmem (haystack + 1, 2, needle, 2) == haystack + 1);
38 assert (memmem (haystack + 2, 1, needle, 2) == NULL);
39 free (haystack);
40 free (needle);
42 haystack = create_mem ("abcabcabc");
43 needle = create_mem ("bca");
44 assert (memmem (haystack, 9, needle, 3) == haystack + 1);
45 free (haystack);
46 free (needle);
48 haystack = create_mem ("abcabcabc");
49 needle = create_mem ("bcad");
50 assert (memmem (haystack, 9, needle, 4) == NULL);
51 free (haystack);
52 free (needle);
54 haystack = create_mem ("xxxxxxxxxxxxxxxxxABC");
55 needle = create_mem ("ABCD");
56 assert (memmem (haystack, 20, needle, 2) == haystack + 17);
57 assert (memmem (haystack + 3, 17, needle, 2) == haystack + 17);
58 assert (memmem (haystack + 15, 5, needle, 2) == haystack + 17);
59 assert (memmem (haystack, 20, needle, 3) == haystack + 17);
60 assert (memmem (haystack + 3, 17, needle, 3) == haystack + 17);
61 assert (memmem (haystack + 15, 5, needle, 3) == haystack + 17);
62 assert (memmem (haystack, 20, needle, 4) == NULL);
63 assert (memmem (haystack + 3, 5, needle, 4) == NULL);
64 assert (memmem (haystack + 15, 5, needle, 4) == NULL);
65 free (haystack);
66 free (needle);
68 return 0;