[libvirt] [PATCHv2 3/7] conf: use virDirRead API

Eric Blake eblake at redhat.com
Sat Apr 26 13:18:16 UTC 2014


When reading configuration files, we were silently ignoring
directory read failures.  While unlikely, we might as well
report them.

* src/conf/domain_conf.c (virDomainObjListLoadAllConfigs): Report
readdir errors.
* src/conf/network_conf.c (virNetworkLoadAllState)
(virNetworkLoadAllConfigs): Likewise.
* src/conf/nwfilter_conf.c (virNWFilterLoadAllConfigs): Likewise.
* src/conf/storage_conf.c (virStoragePoolLoadAllConfigs):
Likewise.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 src/conf/domain_conf.c   |  5 +++--
 src/conf/network_conf.c  | 11 ++++++-----
 src/conf/nwfilter_conf.c |  6 +++---
 src/conf/storage_conf.c  |  6 +++---
 4 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c655bcf..0569f66 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -18219,6 +18219,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
 {
     DIR *dir;
     struct dirent *entry;
+    int ret = -1;

     VIR_INFO("Scanning for configs in %s", configDir);

@@ -18233,7 +18234,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,

     virObjectLock(doms);

-    while ((entry = readdir(dir))) {
+    while ((ret = virDirRead(dir, &entry, configDir)) > 0) {
         virDomainObjPtr dom;

         if (entry->d_name[0] == '.')
@@ -18273,7 +18274,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,

     closedir(dir);
     virObjectUnlock(doms);
-    return 0;
+    return ret;
 }

 int
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 56c4a09..94ebaf8 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -3139,6 +3139,7 @@ virNetworkLoadAllState(virNetworkObjListPtr nets,
 {
     DIR *dir;
     struct dirent *entry;
+    int ret = -1;

     if (!(dir = opendir(stateDir))) {
         if (errno == ENOENT)
@@ -3148,7 +3149,7 @@ virNetworkLoadAllState(virNetworkObjListPtr nets,
         return -1;
     }

-    while ((entry = readdir(dir))) {
+    while ((ret = virDirRead(dir, &entry, stateDir)) > 0) {
         virNetworkObjPtr net;

         if (entry->d_name[0] == '.')
@@ -3162,7 +3163,7 @@ virNetworkLoadAllState(virNetworkObjListPtr nets,
     }

     closedir(dir);
-    return 0;
+    return ret;
 }


@@ -3172,6 +3173,7 @@ int virNetworkLoadAllConfigs(virNetworkObjListPtr nets,
 {
     DIR *dir;
     struct dirent *entry;
+    int ret = -1;

     if (!(dir = opendir(configDir))) {
         if (errno == ENOENT)
@@ -3182,7 +3184,7 @@ int virNetworkLoadAllConfigs(virNetworkObjListPtr nets,
         return -1;
     }

-    while ((entry = readdir(dir))) {
+    while ((ret = virDirRead(dir, &entry, configDir)) > 0) {
         virNetworkObjPtr net;

         if (entry->d_name[0] == '.')
@@ -3202,8 +3204,7 @@ int virNetworkLoadAllConfigs(virNetworkObjListPtr nets,
     }

     closedir(dir);
-
-    return 0;
+    return ret;
 }

 int virNetworkDeleteConfig(const char *configDir,
diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
index b332f0f..90da0b5 100644
--- a/src/conf/nwfilter_conf.c
+++ b/src/conf/nwfilter_conf.c
@@ -3097,6 +3097,7 @@ virNWFilterLoadAllConfigs(virNWFilterObjListPtr nwfilters,
 {
     DIR *dir;
     struct dirent *entry;
+    int ret = -1;

     if (!(dir = opendir(configDir))) {
         if (errno == ENOENT) {
@@ -3107,7 +3108,7 @@ virNWFilterLoadAllConfigs(virNWFilterObjListPtr nwfilters,
         return -1;
     }

-    while ((entry = readdir(dir))) {
+    while ((ret = virDirRead(dir, &entry, configDir)) > 0) {
         char *path;
         virNWFilterObjPtr nwfilter;

@@ -3128,8 +3129,7 @@ virNWFilterLoadAllConfigs(virNWFilterObjListPtr nwfilters,
     }

     closedir(dir);
-
-    return 0;
+    return ret;
 }


diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index ebd42c2..9769b19 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1862,6 +1862,7 @@ virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools,
 {
     DIR *dir;
     struct dirent *entry;
+    int ret;

     if (!(dir = opendir(configDir))) {
         if (errno == ENOENT)
@@ -1871,7 +1872,7 @@ virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools,
         return -1;
     }

-    while ((entry = readdir(dir))) {
+    while ((ret = virDirRead(dir, &entry, configDir)) > 0) {
         char *path;
         char *autostartLink;
         virStoragePoolObjPtr pool;
@@ -1901,8 +1902,7 @@ virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools,
     }

     closedir(dir);
-
-    return 0;
+    return ret;
 }

 int
-- 
1.9.0




More information about the libvir-list mailing list