Проблемы заключаются в этом коде:
if (S_ISDIR(buffer.st_mode)) {
name = entry->d_name;
chdir(name);
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
listdir(name); //THIS IS THE NAME OF THE FUNCTION THAT THIS SNIPPET IT FROM!
chdir("..");
}
Это встроено в цикл do-while, но вы не показываете, как читается запись каталога.
Условия strcmp()
должны применяться к текущему каталогу перед выполнением chdir()
; это «опасная» операция. Когда вы уверены, что вам нужно обработать каталог, вы можете выполнить chdir()
, открыть новый поток каталога и обработать записи из нового потока - что, вероятно, является рекурсивным вызовом, а затем chdir()
обратно. Ваш прыжок после того, как вы сделали chdir(..)
(потому что вы не проверяли ..
до выполнения chdir(name)
), может нанести ущерб вещам.
Вам следует поискать fchdir()
, что может быть лучше, чтобы вернуться туда, откуда вы начали.