Учитывая имя пути, к которому вы пытаетесь stat
, это кажется совершенно очевидным: stat()
завершается неудачно, а объявленный вами struct stat stat_path
остается неинициализированным, поэтому ваш if
будет переходить на неинициализированные данные.
Проверьте возвращаемое значение stat()
на наличие ошибок:
int res;
res = stat(path, &stat_path);
if (res != 0) {
// Handle the error somehow.
perror("stat failed");
return 0; // Return something appropriate here.
}
if (S_ISDIR(stat_path.st_mode))
return 1;
return 0;
Или, более компактно (при условии, что вы хотите трактовать ошибку так же, как "не каталог"):
return !stat(path, &stat_path) && S_ISDIR(stat_path.st_mode);