dir.c: refresh pathtype when emulating `IFTODT` in `glob_helper`

When using `IFTODT` defined in libc, `dirent.d_type` oriented pathtype
is compatible with `IFTODT(stat.st_mode)`. However they are not
compatible when emulating `IFTODT`, so `glob_helper` has to stat instead
of reusing dirent result by passing unknown pathtype to `glob_helper`.

This is a follow-up fix of 0c90ca4dd0
This commit is contained in:
Yuta Saito 2022-03-17 11:05:15 +00:00
Родитель 07acd6006c
Коммит 44d0caa1ca
1 изменённых файлов: 2 добавлений и 2 удалений

4
dir.c
Просмотреть файл

@ -2148,7 +2148,7 @@ dirent_copy(const struct dirent *dp, rb_dirent_t *rdp)
newrdp->d_altname = dp->d_altname; newrdp->d_altname = dp->d_altname;
#endif #endif
} }
#ifdef DT_UNKNOWN #if !EMULATE_IFTODT
newrdp->d_type = dp->d_type; newrdp->d_type = dp->d_type;
#else #else
newrdp->d_type = 0; newrdp->d_type = 0;
@ -2470,7 +2470,7 @@ glob_helper(
break; break;
} }
name = buf + pathlen + (dirsep != 0); name = buf + pathlen + (dirsep != 0);
#ifdef DT_UNKNOWN #if !EMULATE_IFTODT
if (dp->d_type != DT_UNKNOWN) { if (dp->d_type != DT_UNKNOWN) {
/* Got it. We need no more lstat. */ /* Got it. We need no more lstat. */
new_pathtype = dp->d_type; new_pathtype = dp->d_type;