mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-21 10:50:24 +03:00
qemu: don't rely on the non-portable d_type field in dirent
d_type is a non-portable extension to the struct dirent and even if it exists, its value may be DT_UNKNOWN if the filesystem doesn't support it. This is common with older versions of XFS which have ftype=0 feature. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
ff376c6283
commit
ebe9c6eab7
@ -924,9 +924,7 @@ qemuFirmwareBuildFileList(virHashTablePtr files, const char *dir)
|
||||
while ((rc = virDirRead(dirp, &ent, dir)) > 0) {
|
||||
VIR_AUTOFREE(char *) filename = NULL;
|
||||
VIR_AUTOFREE(char *) path = NULL;
|
||||
|
||||
if (ent->d_type != DT_REG && ent->d_type != DT_LNK)
|
||||
continue;
|
||||
struct stat sb;
|
||||
|
||||
if (STRPREFIX(ent->d_name, "."))
|
||||
continue;
|
||||
@ -937,6 +935,14 @@ qemuFirmwareBuildFileList(virHashTablePtr files, const char *dir)
|
||||
if (virAsprintf(&path, "%s/%s", dir, filename) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (stat(path, &sb) < 0) {
|
||||
virReportSystemError(errno, _("Unable to access %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!S_ISREG(sb.st_mode) && !S_ISLNK(sb.st_mode))
|
||||
continue;
|
||||
|
||||
if (virHashUpdateEntry(files, filename, path) < 0)
|
||||
goto cleanup;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user