1f08c3bdfSopenharmony_ci/*
2f08c3bdfSopenharmony_ci *
3f08c3bdfSopenharmony_ci *   Copyright (c) International Business Machines  Corp., 2002
4f08c3bdfSopenharmony_ci *
5f08c3bdfSopenharmony_ci *   This program is free software;  you can redistribute it and/or modify
6f08c3bdfSopenharmony_ci *   it under the terms of the GNU General Public License as published by
7f08c3bdfSopenharmony_ci *   the Free Software Foundation; either version 2 of the License, or
8f08c3bdfSopenharmony_ci *   (at your option) any later version.
9f08c3bdfSopenharmony_ci *
10f08c3bdfSopenharmony_ci *   This program is distributed in the hope that it will be useful,
11f08c3bdfSopenharmony_ci *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
12f08c3bdfSopenharmony_ci *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13f08c3bdfSopenharmony_ci *   the GNU General Public License for more details.
14f08c3bdfSopenharmony_ci *
15f08c3bdfSopenharmony_ci *   You should have received a copy of the GNU General Public License
16f08c3bdfSopenharmony_ci *   along with this program;  if not, write to the Free Software
17f08c3bdfSopenharmony_ci *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18f08c3bdfSopenharmony_ci */
19f08c3bdfSopenharmony_ci
20f08c3bdfSopenharmony_ci/* 10/31/2002   Port to LTP     robbiew@us.ibm.com */
21f08c3bdfSopenharmony_ci/* 06/30/2001   Port to Linux   nsharoff@us.ibm.com */
22f08c3bdfSopenharmony_ci
23f08c3bdfSopenharmony_ci/*
24f08c3bdfSopenharmony_ci * NAME
25f08c3bdfSopenharmony_ci *	test_func64.c - nftw64() calls these functions.
26f08c3bdfSopenharmony_ci */
27f08c3bdfSopenharmony_ci
28f08c3bdfSopenharmony_ci#include "nftw64.h"
29f08c3bdfSopenharmony_ci
30f08c3bdfSopenharmony_ciextern pathdata pathdat[];
31f08c3bdfSopenharmony_ciextern struct list mnem[], badlist[];
32f08c3bdfSopenharmony_ciextern char *dirlist[NDIRLISTENTS];
33f08c3bdfSopenharmony_ciextern const char *rw_fs_name;
34f08c3bdfSopenharmony_ciextern int npathdats, ngoods, nbads, nmnem, visit, next_fd[4];
35f08c3bdfSopenharmony_ciextern FILE *temp;
36f08c3bdfSopenharmony_ci
37f08c3bdfSopenharmony_ci/*
38f08c3bdfSopenharmony_ci * Calling function should free the dirlist array.
39f08c3bdfSopenharmony_ci */
40f08c3bdfSopenharmony_ciint
41f08c3bdfSopenharmony_citest_func1(const char *path_name, const struct stat64 *stat_pointer,
42f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
43f08c3bdfSopenharmony_ci{
44f08c3bdfSopenharmony_ci	char *s;
45f08c3bdfSopenharmony_ci	const char *p;
46f08c3bdfSopenharmony_ci	temp = stderr;
47f08c3bdfSopenharmony_ci
48f08c3bdfSopenharmony_ci	if ((s = malloc((size_t)(strlen((char *)path_name) + 1)))
49f08c3bdfSopenharmony_ci	    == NULL) {
50f08c3bdfSopenharmony_ci		perror("malloc in test_func1");
51f08c3bdfSopenharmony_ci		return 999;
52f08c3bdfSopenharmony_ci	}
53f08c3bdfSopenharmony_ci
54f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
55f08c3bdfSopenharmony_ci		p += strlen(NFTW);
56f08c3bdfSopenharmony_ci	} else {
57f08c3bdfSopenharmony_ci		p = path_name;
58f08c3bdfSopenharmony_ci	}
59f08c3bdfSopenharmony_ci
60f08c3bdfSopenharmony_ci	(void)strcpy(s, p);
61f08c3bdfSopenharmony_ci	dirlist[visit++] = s;
62f08c3bdfSopenharmony_ci
63f08c3bdfSopenharmony_ci#ifdef DEBUG
64f08c3bdfSopenharmony_ci	fprintf(temp, "INFO: Call to fn() at %s\n", path_name);
65f08c3bdfSopenharmony_ci#endif
66f08c3bdfSopenharmony_ci
67f08c3bdfSopenharmony_ci	if (visit >= NDIRLISTENTS) {
68f08c3bdfSopenharmony_ci		fprintf(temp, "ERROR: Too many paths traversed\n");
69f08c3bdfSopenharmony_ci		return 999;
70f08c3bdfSopenharmony_ci	}
71f08c3bdfSopenharmony_ci	return 0;
72f08c3bdfSopenharmony_ci}
73f08c3bdfSopenharmony_ci
74f08c3bdfSopenharmony_ciint
75f08c3bdfSopenharmony_citest_func3(const char *path_name, const struct stat64 *stat_pointer,
76f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
77f08c3bdfSopenharmony_ci{
78f08c3bdfSopenharmony_ci	visit++;
79f08c3bdfSopenharmony_ci	temp = stderr;
80f08c3bdfSopenharmony_ci#ifdef DEBUG
81f08c3bdfSopenharmony_ci	fprintf(temp, "INFO: Call to fn() at %s\n", path_name);
82f08c3bdfSopenharmony_ci#endif
83f08c3bdfSopenharmony_ci
84f08c3bdfSopenharmony_ci	if (visit >= NDIRLISTENTS) {
85f08c3bdfSopenharmony_ci		fprintf(temp, "ERROR: Too many paths traversed\n");
86f08c3bdfSopenharmony_ci		return 999;
87f08c3bdfSopenharmony_ci	}
88f08c3bdfSopenharmony_ci
89f08c3bdfSopenharmony_ci	if (strcmp(path_name, "./tmp/data/dirl/dir_right.1/dir_right.2/right.3")
90f08c3bdfSopenharmony_ci	    == 0) {
91f08c3bdfSopenharmony_ci		fprintf(temp,
92f08c3bdfSopenharmony_ci			"ERROR: Target of right.3 was already reported so this file should not be\n");
93f08c3bdfSopenharmony_ci		return 999;
94f08c3bdfSopenharmony_ci	}
95f08c3bdfSopenharmony_ci
96f08c3bdfSopenharmony_ci	return 0;
97f08c3bdfSopenharmony_ci}
98f08c3bdfSopenharmony_ci
99f08c3bdfSopenharmony_ciint
100f08c3bdfSopenharmony_citest_func4(const char *path_name, const struct stat64 *stat_pointer,
101f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
102f08c3bdfSopenharmony_ci{
103f08c3bdfSopenharmony_ci	visit++;
104f08c3bdfSopenharmony_ci	do_info(path_name);
105f08c3bdfSopenharmony_ci
106f08c3bdfSopenharmony_ci	/* Stop traversal once directory is visited. */
107f08c3bdfSopenharmony_ci	if (strcmp(path_name, "./tmp/data/d777") == 0)
108f08c3bdfSopenharmony_ci		return 999;
109f08c3bdfSopenharmony_ci	return 0;
110f08c3bdfSopenharmony_ci}
111f08c3bdfSopenharmony_ci
112f08c3bdfSopenharmony_ciint
113f08c3bdfSopenharmony_citest_func5(const char *path_name, const struct stat64 *stat_pointer,
114f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
115f08c3bdfSopenharmony_ci{
116f08c3bdfSopenharmony_ci	char pathcwd[PATH_MAX];
117f08c3bdfSopenharmony_ci
118f08c3bdfSopenharmony_ci	temp = stderr;
119f08c3bdfSopenharmony_ci	if (ftw_integer == FTW_D)
120f08c3bdfSopenharmony_ci		return (0);
121f08c3bdfSopenharmony_ci
122f08c3bdfSopenharmony_ci	if (getcwd(pathcwd, sizeof(pathcwd)) == NULL) {
123f08c3bdfSopenharmony_ci		perror("getcwd");
124f08c3bdfSopenharmony_ci		return 998;
125f08c3bdfSopenharmony_ci	}
126f08c3bdfSopenharmony_ci
127f08c3bdfSopenharmony_ci	if (strstr(path_name, pathcwd) == 0) {
128f08c3bdfSopenharmony_ci		fprintf(temp, "ERROR: For file %s cwd is %s\n", path_name,
129f08c3bdfSopenharmony_ci			pathcwd);
130f08c3bdfSopenharmony_ci		return 999;
131f08c3bdfSopenharmony_ci	}
132f08c3bdfSopenharmony_ci
133f08c3bdfSopenharmony_ci	return (0);
134f08c3bdfSopenharmony_ci}
135f08c3bdfSopenharmony_ci
136f08c3bdfSopenharmony_ciint
137f08c3bdfSopenharmony_citest_func7(const char *path_name, const struct stat64 *stat_pointer,
138f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
139f08c3bdfSopenharmony_ci{
140f08c3bdfSopenharmony_ci	int i, found;
141f08c3bdfSopenharmony_ci	const char *p;
142f08c3bdfSopenharmony_ci
143f08c3bdfSopenharmony_ci	temp = stderr;
144f08c3bdfSopenharmony_ci	do_info(path_name);
145f08c3bdfSopenharmony_ci
146f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
147f08c3bdfSopenharmony_ci		p += strlen(NFTW);
148f08c3bdfSopenharmony_ci	} else {
149f08c3bdfSopenharmony_ci		p = path_name;
150f08c3bdfSopenharmony_ci	}
151f08c3bdfSopenharmony_ci
152f08c3bdfSopenharmony_ci	for (found = i = 0; i < nbads; i++) {
153f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
154f08c3bdfSopenharmony_ci			found++;
155f08c3bdfSopenharmony_ci			break;
156f08c3bdfSopenharmony_ci		}
157f08c3bdfSopenharmony_ci	}
158f08c3bdfSopenharmony_ci
159f08c3bdfSopenharmony_ci	if (!found) {
160f08c3bdfSopenharmony_ci		fprintf(temp, "ERROR: Should not have traversed %s\n",
161f08c3bdfSopenharmony_ci			path_name);
162f08c3bdfSopenharmony_ci		return 999;
163f08c3bdfSopenharmony_ci	}
164f08c3bdfSopenharmony_ci	return 0;
165f08c3bdfSopenharmony_ci}
166f08c3bdfSopenharmony_ci
167f08c3bdfSopenharmony_ciint
168f08c3bdfSopenharmony_citest_func8(const char *path_name, const struct stat64 *stat_pointer,
169f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
170f08c3bdfSopenharmony_ci{
171f08c3bdfSopenharmony_ci	int i;
172f08c3bdfSopenharmony_ci	const char *p;
173f08c3bdfSopenharmony_ci	struct stat st_buf;
174f08c3bdfSopenharmony_ci
175f08c3bdfSopenharmony_ci	temp = stderr;
176f08c3bdfSopenharmony_ci	do_info(path_name);
177f08c3bdfSopenharmony_ci
178f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
179f08c3bdfSopenharmony_ci		p += strlen(NFTW);
180f08c3bdfSopenharmony_ci	} else {
181f08c3bdfSopenharmony_ci		p = path_name;
182f08c3bdfSopenharmony_ci	}
183f08c3bdfSopenharmony_ci
184f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
185f08c3bdfSopenharmony_ci		if (ftw_integer == FTW_D || ftw_integer == FTW_F ||
186f08c3bdfSopenharmony_ci		    ftw_integer == FTW_SL) {
187f08c3bdfSopenharmony_ci			if ((((ftw_integer == FTW_D) || (ftw_integer ==
188f08c3bdfSopenharmony_ci							 FTW_F)) ?
189f08c3bdfSopenharmony_ci			     stat(path_name, &st_buf) : lstat(path_name,
190f08c3bdfSopenharmony_ci							      &st_buf)) == -1) {
191f08c3bdfSopenharmony_ci				perror("stat");
192f08c3bdfSopenharmony_ci				return 999;
193f08c3bdfSopenharmony_ci			}
194f08c3bdfSopenharmony_ci
195f08c3bdfSopenharmony_ci			if (st_buf.st_dev != stat_pointer->st_dev) {
196f08c3bdfSopenharmony_ci				fprintf(temp,
197f08c3bdfSopenharmony_ci					"ERROR: st_dev members do not match for %s\n",
198f08c3bdfSopenharmony_ci					path_name);
199f08c3bdfSopenharmony_ci				return 999;
200f08c3bdfSopenharmony_ci			}
201f08c3bdfSopenharmony_ci
202f08c3bdfSopenharmony_ci			if (st_buf.st_ino != stat_pointer->st_ino) {
203f08c3bdfSopenharmony_ci				fprintf(temp,
204f08c3bdfSopenharmony_ci					"ERROR: st_ino members do not match for %s\n",
205f08c3bdfSopenharmony_ci					path_name);
206f08c3bdfSopenharmony_ci				return 999;
207f08c3bdfSopenharmony_ci			}
208f08c3bdfSopenharmony_ci
209f08c3bdfSopenharmony_ci			if (st_buf.st_mode != stat_pointer->st_mode) {
210f08c3bdfSopenharmony_ci				fprintf(temp,
211f08c3bdfSopenharmony_ci					"ERROR: st_mode members do not match for %s\n",
212f08c3bdfSopenharmony_ci					path_name);
213f08c3bdfSopenharmony_ci				return 999;
214f08c3bdfSopenharmony_ci			}
215f08c3bdfSopenharmony_ci
216f08c3bdfSopenharmony_ci			if (st_buf.st_nlink != stat_pointer->st_nlink) {
217f08c3bdfSopenharmony_ci				fprintf(temp,
218f08c3bdfSopenharmony_ci					"ERROR: st_nlink members d o not match for %s\n",
219f08c3bdfSopenharmony_ci					path_name);
220f08c3bdfSopenharmony_ci				return 999;
221f08c3bdfSopenharmony_ci			}
222f08c3bdfSopenharmony_ci
223f08c3bdfSopenharmony_ci			if (st_buf.st_uid != stat_pointer->st_uid) {
224f08c3bdfSopenharmony_ci				fprintf(temp,
225f08c3bdfSopenharmony_ci					"ERROR: st_uid members do not match for %s\n",
226f08c3bdfSopenharmony_ci					path_name);
227f08c3bdfSopenharmony_ci				return 999;
228f08c3bdfSopenharmony_ci			}
229f08c3bdfSopenharmony_ci
230f08c3bdfSopenharmony_ci			if (st_buf.st_gid != stat_pointer->st_gid) {
231f08c3bdfSopenharmony_ci				fprintf(temp,
232f08c3bdfSopenharmony_ci					"ERROR: st_gid members do not match for %s\n",
233f08c3bdfSopenharmony_ci					path_name);
234f08c3bdfSopenharmony_ci				return 999;
235f08c3bdfSopenharmony_ci			}
236f08c3bdfSopenharmony_ci
237f08c3bdfSopenharmony_ci			if (st_buf.st_size != stat_pointer->st_size) {
238f08c3bdfSopenharmony_ci				fprintf(temp,
239f08c3bdfSopenharmony_ci					"ERROR: st_size members do not match for %s\n",
240f08c3bdfSopenharmony_ci					path_name);
241f08c3bdfSopenharmony_ci				return 999;
242f08c3bdfSopenharmony_ci			}
243f08c3bdfSopenharmony_ci		}
244f08c3bdfSopenharmony_ci
245f08c3bdfSopenharmony_ci	}
246f08c3bdfSopenharmony_ci	return 0;
247f08c3bdfSopenharmony_ci}
248f08c3bdfSopenharmony_ci
249f08c3bdfSopenharmony_ciint
250f08c3bdfSopenharmony_citest_func9(const char *path_name, const struct stat64 *stat_pointer,
251f08c3bdfSopenharmony_ci	   int ftw_integer, struct FTW *ftwp)
252f08c3bdfSopenharmony_ci{
253f08c3bdfSopenharmony_ci	int i;
254f08c3bdfSopenharmony_ci	const char *p;
255f08c3bdfSopenharmony_ci
256f08c3bdfSopenharmony_ci	do_info(path_name);
257f08c3bdfSopenharmony_ci
258f08c3bdfSopenharmony_ci	temp = stderr;
259f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
260f08c3bdfSopenharmony_ci		p += strlen(NFTW);
261f08c3bdfSopenharmony_ci	} else {
262f08c3bdfSopenharmony_ci		p = path_name;
263f08c3bdfSopenharmony_ci	}
264f08c3bdfSopenharmony_ci
265f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
266f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
267f08c3bdfSopenharmony_ci
268f08c3bdfSopenharmony_ci			if (ftw_integer == FTW_F) {
269f08c3bdfSopenharmony_ci				if (ftw_integer != badlist[i].i) {
270f08c3bdfSopenharmony_ci					fprintf(temp,
271f08c3bdfSopenharmony_ci						"ERROR: Bad thrid arg to fn () for %s\n",
272f08c3bdfSopenharmony_ci						path_name);
273f08c3bdfSopenharmony_ci					fprintf(temp, "       Expected %s\n",
274f08c3bdfSopenharmony_ci						ftw_mnemonic(badlist[i].i));
275f08c3bdfSopenharmony_ci					fprintf(temp, "       Received %s\n",
276f08c3bdfSopenharmony_ci						ftw_mnemonic(ftw_integer));
277f08c3bdfSopenharmony_ci					return 999;
278f08c3bdfSopenharmony_ci				}
279f08c3bdfSopenharmony_ci			}
280f08c3bdfSopenharmony_ci		}
281f08c3bdfSopenharmony_ci	}
282f08c3bdfSopenharmony_ci	return 0;
283f08c3bdfSopenharmony_ci}
284f08c3bdfSopenharmony_ci
285f08c3bdfSopenharmony_ciint
286f08c3bdfSopenharmony_citest_func10(const char *path_name, const struct stat64 *stat_pointer,
287f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
288f08c3bdfSopenharmony_ci{
289f08c3bdfSopenharmony_ci	int i;
290f08c3bdfSopenharmony_ci	const char *p;
291f08c3bdfSopenharmony_ci
292f08c3bdfSopenharmony_ci	temp = stderr;
293f08c3bdfSopenharmony_ci	do_info(path_name);
294f08c3bdfSopenharmony_ci
295f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
296f08c3bdfSopenharmony_ci		p += strlen(NFTW);
297f08c3bdfSopenharmony_ci	} else {
298f08c3bdfSopenharmony_ci		p = path_name;
299f08c3bdfSopenharmony_ci	}
300f08c3bdfSopenharmony_ci
301f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
302f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
303f08c3bdfSopenharmony_ci			if (ftw_integer == FTW_D) {
304f08c3bdfSopenharmony_ci				if (ftw_integer != badlist[i].i) {
305f08c3bdfSopenharmony_ci					fprintf(temp,
306f08c3bdfSopenharmony_ci						"ERROR: Bad third arg to fn () for %s\n",
307f08c3bdfSopenharmony_ci						path_name);
308f08c3bdfSopenharmony_ci					fprintf(temp, "       Expected %s\n",
309f08c3bdfSopenharmony_ci						ftw_mnemonic(badlist[i].i));
310f08c3bdfSopenharmony_ci					fprintf(temp, "       Received %s\n",
311f08c3bdfSopenharmony_ci						ftw_mnemonic(ftw_integer));
312f08c3bdfSopenharmony_ci					return 999;
313f08c3bdfSopenharmony_ci				}
314f08c3bdfSopenharmony_ci			}
315f08c3bdfSopenharmony_ci		}
316f08c3bdfSopenharmony_ci	}
317f08c3bdfSopenharmony_ci	return 0;
318f08c3bdfSopenharmony_ci}
319f08c3bdfSopenharmony_ci
320f08c3bdfSopenharmony_ciint
321f08c3bdfSopenharmony_citest_func11(const char *path_name, const struct stat64 *stat_pointer,
322f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
323f08c3bdfSopenharmony_ci{
324f08c3bdfSopenharmony_ci	int i;
325f08c3bdfSopenharmony_ci	const char *p;
326f08c3bdfSopenharmony_ci
327f08c3bdfSopenharmony_ci	temp = stderr;
328f08c3bdfSopenharmony_ci	do_info(path_name);
329f08c3bdfSopenharmony_ci
330f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
331f08c3bdfSopenharmony_ci		p += strlen(NFTW);
332f08c3bdfSopenharmony_ci	} else {
333f08c3bdfSopenharmony_ci		p = path_name;
334f08c3bdfSopenharmony_ci	}
335f08c3bdfSopenharmony_ci
336f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
337f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
338f08c3bdfSopenharmony_ci			if (ftw_integer == FTW_DP) {
339f08c3bdfSopenharmony_ci				if (ftw_integer != badlist[i].i) {
340f08c3bdfSopenharmony_ci					fprintf(temp,
341f08c3bdfSopenharmony_ci						"ERROR: Bad third arg to fn () for %s\n",
342f08c3bdfSopenharmony_ci						path_name);
343f08c3bdfSopenharmony_ci					fprintf(temp, "       Expected %s\n",
344f08c3bdfSopenharmony_ci						ftw_mnemonic(badlist[i].i));
345f08c3bdfSopenharmony_ci					fprintf(temp, "       Received %s\n",
346f08c3bdfSopenharmony_ci						ftw_mnemonic(ftw_integer));
347f08c3bdfSopenharmony_ci					return 999;
348f08c3bdfSopenharmony_ci				}
349f08c3bdfSopenharmony_ci			}
350f08c3bdfSopenharmony_ci		}
351f08c3bdfSopenharmony_ci	}
352f08c3bdfSopenharmony_ci	return 0;
353f08c3bdfSopenharmony_ci}
354f08c3bdfSopenharmony_ci
355f08c3bdfSopenharmony_ciint
356f08c3bdfSopenharmony_citest_func12(const char *path_name, const struct stat64 *stat_pointer,
357f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
358f08c3bdfSopenharmony_ci{
359f08c3bdfSopenharmony_ci	int i;
360f08c3bdfSopenharmony_ci	const char *p;
361f08c3bdfSopenharmony_ci
362f08c3bdfSopenharmony_ci	temp = stderr;
363f08c3bdfSopenharmony_ci	do_info(path_name);
364f08c3bdfSopenharmony_ci
365f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
366f08c3bdfSopenharmony_ci		p += strlen(NFTW);
367f08c3bdfSopenharmony_ci	} else {
368f08c3bdfSopenharmony_ci		p = path_name;
369f08c3bdfSopenharmony_ci	}
370f08c3bdfSopenharmony_ci
371f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
372f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
373f08c3bdfSopenharmony_ci			if (ftw_integer == FTW_SL) {
374f08c3bdfSopenharmony_ci				if (ftw_integer != badlist[i].i) {
375f08c3bdfSopenharmony_ci					fprintf(temp,
376f08c3bdfSopenharmony_ci						"ERROR: Bad third arg to fn() for %s.  Expected %s, Received %s\n",
377f08c3bdfSopenharmony_ci						path_name,
378f08c3bdfSopenharmony_ci						ftw_mnemonic(badlist[i].i),
379f08c3bdfSopenharmony_ci						ftw_mnemonic(ftw_integer));
380f08c3bdfSopenharmony_ci					return 999;
381f08c3bdfSopenharmony_ci				}
382f08c3bdfSopenharmony_ci			}
383f08c3bdfSopenharmony_ci		}
384f08c3bdfSopenharmony_ci	}
385f08c3bdfSopenharmony_ci	return 0;
386f08c3bdfSopenharmony_ci}
387f08c3bdfSopenharmony_ci
388f08c3bdfSopenharmony_ciint
389f08c3bdfSopenharmony_citest_func13(const char *path_name, const struct stat64 *stat_pointer,
390f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
391f08c3bdfSopenharmony_ci{
392f08c3bdfSopenharmony_ci	int i;
393f08c3bdfSopenharmony_ci	const char *p;
394f08c3bdfSopenharmony_ci
395f08c3bdfSopenharmony_ci	temp = stderr;
396f08c3bdfSopenharmony_ci	do_info(path_name);
397f08c3bdfSopenharmony_ci
398f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
399f08c3bdfSopenharmony_ci		p += strlen(NFTW);
400f08c3bdfSopenharmony_ci	} else {
401f08c3bdfSopenharmony_ci		p = path_name;
402f08c3bdfSopenharmony_ci	}
403f08c3bdfSopenharmony_ci
404f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
405f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
406f08c3bdfSopenharmony_ci
407f08c3bdfSopenharmony_ci			if (ftw_integer == FTW_SLN) {
408f08c3bdfSopenharmony_ci				if (ftw_integer != badlist[i].i) {
409f08c3bdfSopenharmony_ci					fprintf(temp,
410f08c3bdfSopenharmony_ci						"ERROR: Bad third arg to fn() for %s\n",
411f08c3bdfSopenharmony_ci						path_name);
412f08c3bdfSopenharmony_ci					fprintf(temp, "       Expected %s\n",
413f08c3bdfSopenharmony_ci						ftw_mnemonic(badlist[i].i));
414f08c3bdfSopenharmony_ci					fprintf(temp, "       Received %s\n",
415f08c3bdfSopenharmony_ci						ftw_mnemonic(ftw_integer));
416f08c3bdfSopenharmony_ci					return 999;
417f08c3bdfSopenharmony_ci				}
418f08c3bdfSopenharmony_ci			}
419f08c3bdfSopenharmony_ci		}
420f08c3bdfSopenharmony_ci	}
421f08c3bdfSopenharmony_ci	return 0;
422f08c3bdfSopenharmony_ci}
423f08c3bdfSopenharmony_ci
424f08c3bdfSopenharmony_ciint
425f08c3bdfSopenharmony_citest_func14(const char *path_name, const struct stat64 *stat_pointer,
426f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
427f08c3bdfSopenharmony_ci{
428f08c3bdfSopenharmony_ci	int i;
429f08c3bdfSopenharmony_ci	const char *p;
430f08c3bdfSopenharmony_ci
431f08c3bdfSopenharmony_ci	temp = stderr;
432f08c3bdfSopenharmony_ci	do_info(path_name);
433f08c3bdfSopenharmony_ci
434f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW)) != NULL) {
435f08c3bdfSopenharmony_ci		p += strlen(NFTW);
436f08c3bdfSopenharmony_ci	} else {
437f08c3bdfSopenharmony_ci		p = path_name;
438f08c3bdfSopenharmony_ci	}
439f08c3bdfSopenharmony_ci
440f08c3bdfSopenharmony_ci	for (i = 0; i < nbads; i++) {
441f08c3bdfSopenharmony_ci		if (strcmp(p, badlist[i].s) == 0) {
442f08c3bdfSopenharmony_ci
443f08c3bdfSopenharmony_ci			if (ftw_integer == FTW_DNR) {
444f08c3bdfSopenharmony_ci				if (ftw_integer != badlist[i].i) {
445f08c3bdfSopenharmony_ci					fprintf(temp,
446f08c3bdfSopenharmony_ci						"ERROR: Bad third arg to fn() for %s\n",
447f08c3bdfSopenharmony_ci						path_name);
448f08c3bdfSopenharmony_ci					fprintf(temp, "       Expected %s\n",
449f08c3bdfSopenharmony_ci						ftw_mnemonic(badlist[i].i));
450f08c3bdfSopenharmony_ci					fprintf(temp, "       Received %s\n",
451f08c3bdfSopenharmony_ci						ftw_mnemonic(ftw_integer));
452f08c3bdfSopenharmony_ci					return 999;
453f08c3bdfSopenharmony_ci				}
454f08c3bdfSopenharmony_ci			}
455f08c3bdfSopenharmony_ci		}
456f08c3bdfSopenharmony_ci	}
457f08c3bdfSopenharmony_ci	return 0;
458f08c3bdfSopenharmony_ci}
459f08c3bdfSopenharmony_ci
460f08c3bdfSopenharmony_ciint
461f08c3bdfSopenharmony_citest_func15(const char *path_name, const struct stat64 *stat_pointer,
462f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
463f08c3bdfSopenharmony_ci{
464f08c3bdfSopenharmony_ci
465f08c3bdfSopenharmony_ci	temp = stderr;
466f08c3bdfSopenharmony_ci	do_info(path_name);
467f08c3bdfSopenharmony_ci	if (strcmp(path_name, "./tmp/data/d666/errs") == 0) {
468f08c3bdfSopenharmony_ci		if (ftw_integer != FTW_NS) {
469f08c3bdfSopenharmony_ci			fprintf(temp,
470f08c3bdfSopenharmony_ci				"ERROR: FTW_NS not passed for file in unsearchable dir\n");
471f08c3bdfSopenharmony_ci			return 999;
472f08c3bdfSopenharmony_ci		}
473f08c3bdfSopenharmony_ci	}
474f08c3bdfSopenharmony_ci	return 0;
475f08c3bdfSopenharmony_ci}
476f08c3bdfSopenharmony_ci
477f08c3bdfSopenharmony_ciint
478f08c3bdfSopenharmony_citest_func16(const char *path_name, const struct stat64 *stat_pointer,
479f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
480f08c3bdfSopenharmony_ci{
481f08c3bdfSopenharmony_ci	const char *p;
482f08c3bdfSopenharmony_ci	temp = stderr;
483f08c3bdfSopenharmony_ci
484f08c3bdfSopenharmony_ci	if ((p = strstr(path_name, NFTW2)) != NULL) {
485f08c3bdfSopenharmony_ci		p += strlen(NFTW2) + 1;
486f08c3bdfSopenharmony_ci	} else {
487f08c3bdfSopenharmony_ci		p = path_name;
488f08c3bdfSopenharmony_ci	}
489f08c3bdfSopenharmony_ci
490f08c3bdfSopenharmony_ci	if (ftwp->level != getlev(p)) {
491f08c3bdfSopenharmony_ci		fprintf(temp, "ERROR: Incorrect value of level for %s\n",
492f08c3bdfSopenharmony_ci			path_name);
493f08c3bdfSopenharmony_ci		fprintf(temp, "       Expected %d, received %d\n",
494f08c3bdfSopenharmony_ci			getlev(p), ftwp->level);
495f08c3bdfSopenharmony_ci		return 999;
496f08c3bdfSopenharmony_ci	}
497f08c3bdfSopenharmony_ci	if (ftwp->base != getbase(path_name)) {
498f08c3bdfSopenharmony_ci		fprintf(temp, "ERROR: Incorrect value of base for %s\n",
499f08c3bdfSopenharmony_ci			path_name);
500f08c3bdfSopenharmony_ci		fprintf(temp, "       Expected %d, received %d\n",
501f08c3bdfSopenharmony_ci			getbase(path_name), ftwp->base);
502f08c3bdfSopenharmony_ci		return 999;
503f08c3bdfSopenharmony_ci	}
504f08c3bdfSopenharmony_ci	return 0;
505f08c3bdfSopenharmony_ci}
506f08c3bdfSopenharmony_ci
507f08c3bdfSopenharmony_ciint
508f08c3bdfSopenharmony_citest_func17(const char *path_name, const struct stat64 *stat_pointer,
509f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
510f08c3bdfSopenharmony_ci{
511f08c3bdfSopenharmony_ci	do_info(path_name);
512f08c3bdfSopenharmony_ci
513f08c3bdfSopenharmony_ci	if (ftw_integer == FTW_SL) {
514f08c3bdfSopenharmony_ci		visit++;
515f08c3bdfSopenharmony_ci		return 999;
516f08c3bdfSopenharmony_ci	}
517f08c3bdfSopenharmony_ci	return 0;
518f08c3bdfSopenharmony_ci}
519f08c3bdfSopenharmony_ci
520f08c3bdfSopenharmony_ciint
521f08c3bdfSopenharmony_citest_func18(const char *path_name, const struct stat64 *stat_pointer,
522f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
523f08c3bdfSopenharmony_ci{
524f08c3bdfSopenharmony_ci	do_info(path_name);
525f08c3bdfSopenharmony_ci	if (ftw_integer == FTW_SLN) {
526f08c3bdfSopenharmony_ci		visit++;
527f08c3bdfSopenharmony_ci		return 999;
528f08c3bdfSopenharmony_ci	}
529f08c3bdfSopenharmony_ci	return 0;
530f08c3bdfSopenharmony_ci}
531f08c3bdfSopenharmony_ci
532f08c3bdfSopenharmony_ciint
533f08c3bdfSopenharmony_citest_func19(const char *path_name, const struct stat64 *stat_pointer,
534f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
535f08c3bdfSopenharmony_ci{
536f08c3bdfSopenharmony_ci	do_info(path_name);
537f08c3bdfSopenharmony_ci	temp = stderr;
538f08c3bdfSopenharmony_ci	visit++;
539f08c3bdfSopenharmony_ci	if (ftw_integer == FTW_DNR) {
540f08c3bdfSopenharmony_ci		if (strcmp(path_name, "./tmp/data/d333") == 0) {
541f08c3bdfSopenharmony_ci			return 0;
542f08c3bdfSopenharmony_ci		} else {
543f08c3bdfSopenharmony_ci			fprintf(temp,
544f08c3bdfSopenharmony_ci				"ERROR: When FTW_DNR is passed to the function fn the\n");
545f08c3bdfSopenharmony_ci			fprintf(temp,
546f08c3bdfSopenharmony_ci				"       descendants of the directory should not have\n");
547f08c3bdfSopenharmony_ci			fprintf(temp, "       Been processed\n");
548f08c3bdfSopenharmony_ci			return 999;
549f08c3bdfSopenharmony_ci		}
550f08c3bdfSopenharmony_ci	} else {
551f08c3bdfSopenharmony_ci		fprintf(temp,
552f08c3bdfSopenharmony_ci			"ERROR: Directory has read permission or FTW_DNR was not passed to fn\n");
553f08c3bdfSopenharmony_ci		return 999;
554f08c3bdfSopenharmony_ci	}
555f08c3bdfSopenharmony_ci}
556f08c3bdfSopenharmony_ci
557f08c3bdfSopenharmony_ciint
558f08c3bdfSopenharmony_citest_func20(const char *path_name, const struct stat64 *stat_pointer,
559f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
560f08c3bdfSopenharmony_ci{
561f08c3bdfSopenharmony_ci	return 0;
562f08c3bdfSopenharmony_ci}
563f08c3bdfSopenharmony_ci
564f08c3bdfSopenharmony_ciint
565f08c3bdfSopenharmony_citest_func21(const char *path_name, const struct stat64 *stat_pointer,
566f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
567f08c3bdfSopenharmony_ci{
568f08c3bdfSopenharmony_ci	int fd;
569f08c3bdfSopenharmony_ci
570f08c3bdfSopenharmony_ci	do_info(path_name);
571f08c3bdfSopenharmony_ci	temp = stderr;
572f08c3bdfSopenharmony_ci	/* get next file descriptor available */
573f08c3bdfSopenharmony_ci	if ((fd = open(path_name, O_RDONLY)) == -1) {
574f08c3bdfSopenharmony_ci		perror("open");
575f08c3bdfSopenharmony_ci		return 999;
576f08c3bdfSopenharmony_ci	}
577f08c3bdfSopenharmony_ci
578f08c3bdfSopenharmony_ci	if (close(fd) == -1) {
579f08c3bdfSopenharmony_ci		perror("close");
580f08c3bdfSopenharmony_ci		return 999;
581f08c3bdfSopenharmony_ci	}
582f08c3bdfSopenharmony_ci
583f08c3bdfSopenharmony_ci	if ((fd != next_fd[0]) && (fd != next_fd[1])) {
584f08c3bdfSopenharmony_ci		fprintf(temp,
585f08c3bdfSopenharmony_ci			"ERROR: Expected next fd available to be %d (none used) or %d (1 used)\n",
586f08c3bdfSopenharmony_ci			next_fd[0], next_fd[1]);
587f08c3bdfSopenharmony_ci		fprintf(temp, "       Next fd available is %d\n", fd);
588f08c3bdfSopenharmony_ci		return 999;
589f08c3bdfSopenharmony_ci	}
590f08c3bdfSopenharmony_ci	return 0;
591f08c3bdfSopenharmony_ci}
592f08c3bdfSopenharmony_ci
593f08c3bdfSopenharmony_ciint
594f08c3bdfSopenharmony_citest_func22(const char *path_name, const struct stat64 *stat_pointer,
595f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
596f08c3bdfSopenharmony_ci{
597f08c3bdfSopenharmony_ci	int fd;
598f08c3bdfSopenharmony_ci	int i;
599f08c3bdfSopenharmony_ci
600f08c3bdfSopenharmony_ci	do_info(path_name);
601f08c3bdfSopenharmony_ci	/* get next file descriptor available */
602f08c3bdfSopenharmony_ci	if ((fd = open(path_name, O_RDONLY)) == -1) {
603f08c3bdfSopenharmony_ci		perror("open");
604f08c3bdfSopenharmony_ci		return 999;
605f08c3bdfSopenharmony_ci	}
606f08c3bdfSopenharmony_ci
607f08c3bdfSopenharmony_ci	if (close(fd) == -1) {
608f08c3bdfSopenharmony_ci		perror("close");
609f08c3bdfSopenharmony_ci		return 999;
610f08c3bdfSopenharmony_ci	}
611f08c3bdfSopenharmony_ci
612f08c3bdfSopenharmony_ci	for (i = 0; i <= ftwp->level + 1; i++) {
613f08c3bdfSopenharmony_ci		if (fd == next_fd[i])
614f08c3bdfSopenharmony_ci			return 0;
615f08c3bdfSopenharmony_ci	}
616f08c3bdfSopenharmony_ci
617f08c3bdfSopenharmony_ci	fprintf(temp,
618f08c3bdfSopenharmony_ci		"ERROR: At the start of the traversal the next four fds were: %d, %d, %d, and %d\n",
619f08c3bdfSopenharmony_ci		next_fd[0], next_fd[1], next_fd[2], next_fd[3]);
620f08c3bdfSopenharmony_ci	fprintf(temp, "       Traversing level %d the next fd is %d\n",
621f08c3bdfSopenharmony_ci		ftwp->level, fd);
622f08c3bdfSopenharmony_ci	return 999;
623f08c3bdfSopenharmony_ci}
624f08c3bdfSopenharmony_ci
625f08c3bdfSopenharmony_ciint
626f08c3bdfSopenharmony_citest_func23(const char *path_name, const struct stat64 *stat_pointer,
627f08c3bdfSopenharmony_ci	    int ftw_integer, struct FTW *ftwp)
628f08c3bdfSopenharmony_ci{
629f08c3bdfSopenharmony_ci	visit++;
630f08c3bdfSopenharmony_ci	temp = stderr;
631f08c3bdfSopenharmony_ci	do_info(path_name);
632f08c3bdfSopenharmony_ci
633f08c3bdfSopenharmony_ci	if (ftw_integer == FTW_F) {
634f08c3bdfSopenharmony_ci
635f08c3bdfSopenharmony_ci#ifdef DEBUG
636f08c3bdfSopenharmony_ci		fprintf(temp,
637f08c3bdfSopenharmony_ci			"INFO: fn() returning non-zero after traversal of %d objects\n",
638f08c3bdfSopenharmony_ci			visit);
639f08c3bdfSopenharmony_ci#endif
640f08c3bdfSopenharmony_ci
641f08c3bdfSopenharmony_ci		return 999;
642f08c3bdfSopenharmony_ci	}
643f08c3bdfSopenharmony_ci
644f08c3bdfSopenharmony_ci	return 0;
645f08c3bdfSopenharmony_ci}
646