- if (dirAction != NULL && depthFirst == FALSE) {
- status = dirAction(fileName, &statbuf, userData);
- if (status == FALSE) {
- perror_msg("%s", fileName);
- return FALSE;
- } else if (status == SKIP)
- return TRUE;
- }
- dir = opendir(fileName);
- if (!dir) {
- perror_msg("%s", fileName);
- return FALSE;
- }
- status = TRUE;
- while ((next = readdir(dir)) != NULL) {
- char nextFile[PATH_MAX];
-
- if ((strcmp(next->d_name, "..") == 0)
- || (strcmp(next->d_name, ".") == 0)) {
- continue;
- }
- if (strlen(fileName) + strlen(next->d_name) + 1 > PATH_MAX) {
- error_msg(name_too_long);
- return FALSE;
- }
- memset(nextFile, 0, sizeof(nextFile));
- if (fileName[strlen(fileName)-1] == '/')
- sprintf(nextFile, "%s%s", fileName, next->d_name);
- else
- sprintf(nextFile, "%s/%s", fileName, next->d_name);
- if (recursive_action(nextFile, TRUE, followLinks, depthFirst,
- fileAction, dirAction, userData) == FALSE) {
- status = FALSE;
- }
- }
- closedir(dir);
- if (dirAction != NULL && depthFirst == TRUE) {
- if (dirAction(fileName, &statbuf, userData) == FALSE) {
- perror_msg("%s", fileName);
- return FALSE;
- }
- }
- if (status == FALSE)
- return FALSE;
- } else {
- if (fileAction == NULL)
- return TRUE;
- else
- return fileAction(fileName, &statbuf, userData);