return (stat(path, &s) == 0) && S_ISDIR(s.st_mode);
}
+
+bool
+virFileIsRegular(const char *path)
+{
+ struct stat s;
+ return (stat(path, &s) == 0) && S_ISREG(s.st_mode);
+}
+
+
/**
* virFileExists: Check for presence of file
* @path: Path of file to check
return -1;
while ((direrr = virDirRead(dir, &ent, name)) > 0) {
- if (ent->d_type != DT_REG)
- continue;
-
+ VIR_FREE(path);
if (virAsprintf(&path, "%s/%s", name, ent->d_name) < 0)
goto cleanup;
+ if (!virFileIsRegular(path))
+ continue;
+
if (chown(path, uid, gid) < 0) {
virReportSystemError(errno,
_("cannot chown '%s' to (%u, %u)"),
(unsigned int) gid);
goto cleanup;
}
- VIR_FREE(path);
}
if (direrr < 0)
bool virFileIsDir (const char *file) ATTRIBUTE_NONNULL(1);
bool virFileExists(const char *file) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NOINLINE;
bool virFileIsExecutable(const char *file) ATTRIBUTE_NONNULL(1);
+bool virFileIsRegular(const char *file) ATTRIBUTE_NONNULL(1);
enum {
VIR_FILE_SHFS_NFS = (1 << 0),