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