#endif /* WIN32 */
static int
-virDirOpenInternal(DIR **dirp, const char *name, bool ignoreENOENT)
+virDirOpenInternal(DIR **dirp, const char *name, bool ignoreENOENT, bool quiet)
{
*dirp = opendir(name);
if (!*dirp) {
+ if (quiet)
+ return -1;
+
if (ignoreENOENT && errno == ENOENT)
return 0;
virReportSystemError(errno, _("cannot open directory '%s'"), name);
int
virDirOpen(DIR **dirp, const char *name)
{
- return virDirOpenInternal(dirp, name, false);
+ return virDirOpenInternal(dirp, name, false, false);
}
/**
int
virDirOpenIfExists(DIR **dirp, const char *name)
{
- return virDirOpenInternal(dirp, name, true);
+ return virDirOpenInternal(dirp, name, true, false);
+}
+
+/**
+ * virDirOpenQuiet
+ * @dirp: directory stream
+ * @name: path of the directory
+ *
+ * Returns 1 on success.
+ * -1 on failure.
+ *
+ * Does not report any errors and errno is preserved.
+ */
+int
+virDirOpenQuiet(DIR **dirp, const char *name)
+{
+ return virDirOpenInternal(dirp, name, false, true);
}
/**
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virDirOpenIfExists(DIR **dirp, const char *dirname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+int virDirOpenQuiet(DIR **dirp, const char *dirname)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
void virDirClose(DIR **dirp)