10 #define MAX(a, b) ((a) > (b) ? (a) : (b))
14 main (int argc, char *argv[])
16 size_t size = sysconf (_SC_PAGESIZE);
20 adr = (char *) mmap (NULL, size, PROT_READ|PROT_WRITE,
21 MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
25 puts ("No test, mmap not available.");
28 printf ("mmaping failed: %m");
35 int inner, middle, outer;
37 memset (adr, 'T', size);
40 for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
42 for (inner = MAX (outer, size - 64); inner < size; ++inner)
46 if (strlen (&adr[outer]) != inner - outer)
48 printf ("strlen flunked for outer = %d, inner = %d\n",
58 for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
60 for (middle = MAX (outer, size - 64); middle < size; ++middle)
62 for (inner = middle; inner < size; ++inner)
68 cp = strchr (&adr[outer], 'V');
70 if ((inner == middle && cp != NULL)
72 && (cp - &adr[outer]) != middle - outer))
74 printf ("strchr flunked for outer = %d, middle = %d, "
75 "inner = %d\n", outer, middle, inner);
86 for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
88 for (middle = MAX (outer, size - 64); middle < size; ++middle)
90 for (inner = middle; inner < size; ++inner)
96 cp = strrchr (&adr[outer], 'V');
98 if ((inner == middle && cp != NULL)
100 && (cp - &adr[outer]) != middle - outer))
102 printf ("strrchr flunked for outer = %d, middle = %d, "
103 "inner = %d\n", outer, middle, inner);
114 for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
116 for (inner = MAX (outer, size - 64); inner < size; ++inner)
120 if (strcpy (dest, &adr[outer]) != dest
121 || strlen (dest) != inner - outer)
123 printf ("strcpy flunked for outer = %d, inner = %d\n",
133 for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
135 for (inner = MAX (outer, size - 64); inner < size; ++inner)
139 if ((stpcpy (dest, &adr[outer]) - dest) != inner - outer)
141 printf ("stpcpy flunked for outer = %d, inner = %d\n",