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