From 7a5df06e10afb5babeae123099605c332cb5c80c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 21 Jun 2016 16:52:11 +0200 Subject: [PATCH] Introduce virDirOpenQuiet A helper function that does not report any errors. --- src/libvirt_private.syms | 1 + src/util/virfile.c | 25 ++++++++++++++++++++++--- src/util/virfile.h | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a5b2f03eb9..ef30f7f736 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1497,6 +1497,7 @@ virDirClose; virDirCreate; virDirOpen; virDirOpenIfExists; +virDirOpenQuiet; virDirRead; virFileAbsPath; virFileAccessibleAs; diff --git a/src/util/virfile.c b/src/util/virfile.c index ed044ba9c6..84df1824d8 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -2723,10 +2723,13 @@ virFileRemove(const char *path, #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); @@ -2746,7 +2749,7 @@ virDirOpenInternal(DIR **dirp, const char *name, bool ignoreENOENT) int virDirOpen(DIR **dirp, const char *name) { - return virDirOpenInternal(dirp, name, false); + return virDirOpenInternal(dirp, name, false, false); } /** @@ -2761,7 +2764,23 @@ virDirOpen(DIR **dirp, const char *name) 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); } /** diff --git a/src/util/virfile.h b/src/util/virfile.h index 42c65f2d1b..b4ae6ea5f1 100644 --- a/src/util/virfile.h +++ b/src/util/virfile.h @@ -234,6 +234,8 @@ int virDirOpen(DIR **dirp, const char *dirname) 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)