closedir(dirp); /* exempt from syntax-check */
}
+/**
+ * virDirIsEmpty:
+ * @path: path to the directory
+ * @hidden: whether hidden files matter
+ *
+ * Check whether given directory (@path) is empty, i.e. it
+ * contains just the usual entries '.' and '..'. Hidden files are
+ * ignored unless @hidden is true. IOW, a directory containing
+ * nothing but hidden files is considered empty if @hidden is
+ * false and not empty if @hidden is true.
+ *
+ * Returns: 1 if the directory is empty,
+ * 0 if the directory is not empty,
+ * -1 otherwise (no error reported).
+ */
+int virDirIsEmpty(const char *path,
+ bool hidden)
+{
+ g_autoptr(DIR) dir = NULL;
+ struct dirent *ent;
+ int direrr;
+
+ if (virDirOpenQuiet(&dir, path) < 0)
+ return -1;
+
+ while ((direrr = virDirRead(dir, &ent, NULL)) > 0) {
+ /* virDirRead() skips over '.' and '..' so here we have
+ * actual directory entry. */
+ if (!hidden ||
+ (hidden && ent->d_name[0] != '.'))
+ return 0;
+ }
+
+ if (direrr < 0)
+ return -1;
+
+ return 1;
+}
+
/*
* virFileChownFiles:
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
void virDirClose(DIR *dirp);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(DIR, virDirClose);
+int virDirIsEmpty(const char *path,
+ bool hidden)
+ ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT;
int virFileMakeParentPath(const char *path) G_GNUC_WARN_UNUSED_RESULT;