]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix return value semantic of virFileMakePath
authorMatthias Bolte <matthias.bolte@googlemail.com>
Tue, 5 Jul 2011 21:02:53 +0000 (23:02 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 6 Jul 2011 07:27:06 +0000 (09:27 +0200)
Some callers expected virFileMakePath to set errno, some expected
it to return an errno value. Unify this to return 0 on success and
-1 on error. Set errno to report detailed error information.

Also optimize virFileMakePath if stat fails with an errno different
from ENOENT.

16 files changed:
src/conf/domain_conf.c
src/conf/network_conf.c
src/conf/nwfilter_conf.c
src/conf/storage_conf.c
src/libxl/libxl_driver.c
src/lxc/lxc_container.c
src/lxc/lxc_controller.c
src/lxc/lxc_driver.c
src/network/bridge_driver.c
src/qemu/qemu_driver.c
src/qemu/qemu_process.c
src/storage/storage_backend_fs.c
src/storage/storage_driver.c
src/uml/uml_driver.c
src/util/dnsmasq.c
src/util/util.c

index 772422d1a2a79fafd93f0468f7fa7cc4e6832dbe..4e14303d52b77e31f0ced5cef4ac066884b86ae6 100644 (file)
@@ -9989,7 +9989,7 @@ int virDomainSaveXML(const char *configDir,
     if ((configFile = virDomainConfigFile(configDir, def->name)) == NULL)
         goto cleanup;
 
-    if (virFileMakePath(configDir)) {
+    if (virFileMakePath(configDir) < 0) {
         virReportSystemError(errno,
                              _("cannot create config directory '%s'"),
                              configDir);
index 45ddee2def7c4d8ad93784e2ae33c65a719ee5db..ae479bfaf5b8dd5e5acd8c82f14864950cb07920 100644 (file)
@@ -1114,13 +1114,12 @@ int virNetworkSaveXML(const char *configDir,
     char *configFile = NULL;
     int fd = -1, ret = -1;
     size_t towrite;
-    int err;
 
     if ((configFile = virNetworkConfigFile(configDir, def->name)) == NULL)
         goto cleanup;
 
-    if ((err = virFileMakePath(configDir))) {
-        virReportSystemError(err,
+    if (virFileMakePath(configDir) < 0) {
+        virReportSystemError(errno,
                              _("cannot create config directory '%s'"),
                              configDir);
         goto cleanup;
index 127d4be54fa3eafbb66ea00e812a8629bb53e35a..036c61af35e3d203a9add0cf8006b705ed0475e4 100644 (file)
@@ -2184,13 +2184,12 @@ int virNWFilterSaveXML(const char *configDir,
     char *configFile = NULL;
     int fd = -1, ret = -1;
     size_t towrite;
-    int err;
 
     if ((configFile = virNWFilterConfigFile(configDir, def->name)) == NULL)
         goto cleanup;
 
-    if ((err = virFileMakePath(configDir))) {
-        virReportSystemError(err,
+    if (virFileMakePath(configDir) < 0) {
+        virReportSystemError(errno,
                              _("cannot create config directory '%s'"),
                              configDir);
         goto cleanup;
@@ -2574,10 +2573,8 @@ virNWFilterObjSaveDef(virNWFilterDriverStatePtr driver,
     ssize_t towrite;
 
     if (!nwfilter->configFile) {
-        int err;
-
-        if ((err = virFileMakePath(driver->configDir))) {
-            virReportSystemError(err,
+        if (virFileMakePath(driver->configDir) < 0) {
+            virReportSystemError(errno,
                                  _("cannot create config directory %s"),
                                  driver->configDir);
             return -1;
index ca86f192f2acfb6c29978cf463a17a43b80803fa..f6f8be1224e2e0ea9738cf55a018cd21f4069c9f 100644 (file)
@@ -1512,10 +1512,8 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
     ssize_t towrite;
 
     if (!pool->configFile) {
-        int err;
-
-        if ((err = virFileMakePath(driver->configDir))) {
-            virReportSystemError(err,
+        if (virFileMakePath(driver->configDir) < 0) {
+            virReportSystemError(errno,
                                  _("cannot create config directory %s"),
                                  driver->configDir);
             return -1;
index 7fd257d43c7671e0ff335bdd616dc7ccd802c15b..ade69d8cf9c75f3fe2cc3847f484251ba61eb88e 100644 (file)
@@ -914,25 +914,25 @@ libxlStartup(int privileged) {
                     "%s", LIBXL_SAVE_DIR) == -1)
         goto out_of_memory;
 
-    if (virFileMakePath(libxl_driver->logDir) != 0) {
+    if (virFileMakePath(libxl_driver->logDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create log dir '%s': %s"),
                   libxl_driver->logDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(libxl_driver->stateDir) != 0) {
+    if (virFileMakePath(libxl_driver->stateDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create state dir '%s': %s"),
                   libxl_driver->stateDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(libxl_driver->libDir) != 0) {
+    if (virFileMakePath(libxl_driver->libDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create lib dir '%s': %s"),
                   libxl_driver->libDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(libxl_driver->saveDir) != 0) {
+    if (virFileMakePath(libxl_driver->saveDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create save dir '%s': %s"),
                   libxl_driver->saveDir, virStrerror(errno, ebuf, sizeof ebuf));
@@ -3389,10 +3389,8 @@ libxlDomainSetAutostart(virDomainPtr dom, int autostart)
             goto cleanup;
 
         if (autostart) {
-            int err;
-
-            if ((err = virFileMakePath(driver->autostartDir))) {
-                virReportSystemError(err,
+            if (virFileMakePath(driver->autostartDir) < 0) {
+                virReportSystemError(errno,
                                      _("cannot create autostart directory %s"),
                                      driver->autostartDir);
                 goto cleanup;
index 7924858879693de9f65ddce0a982af4d064c5729..ef8469c411427f69b4b0d8afd23d1b649dad1dd0 100644 (file)
@@ -308,7 +308,7 @@ static int lxcContainerChildMountSort(const void *a, const void *b)
 
 static int lxcContainerPivotRoot(virDomainFSDefPtr root)
 {
-    int rc, ret;
+    int ret;
     char *oldroot = NULL, *newroot = NULL;
 
     ret = -1;
@@ -325,8 +325,8 @@ static int lxcContainerPivotRoot(virDomainFSDefPtr root)
         goto err;
     }
 
-    if ((rc = virFileMakePath(oldroot)) != 0) {
-        virReportSystemError(rc,
+    if (virFileMakePath(oldroot) < 0) {
+        virReportSystemError(errno,
                              _("Failed to create %s"),
                              oldroot);
         goto err;
@@ -347,8 +347,8 @@ static int lxcContainerPivotRoot(virDomainFSDefPtr root)
         goto err;
     }
 
-    if ((rc = virFileMakePath(newroot)) != 0) {
-        virReportSystemError(rc,
+    if (virFileMakePath(newroot) < 0) {
+        virReportSystemError(errno,
                              _("Failed to create %s"),
                              newroot);
         goto err;
@@ -415,7 +415,7 @@ static int lxcContainerMountBasicFS(virDomainFSDefPtr root)
     }
 
     for (i = 0 ; i < ARRAY_CARDINALITY(mnts) ; i++) {
-        if (virFileMakePath(mnts[i].dst) != 0) {
+        if (virFileMakePath(mnts[i].dst) < 0) {
             virReportSystemError(errno,
                                  _("Failed to mkdir %s"),
                                  mnts[i].src);
@@ -429,8 +429,8 @@ static int lxcContainerMountBasicFS(virDomainFSDefPtr root)
         }
     }
 
-    if ((rc = virFileMakePath("/dev/pts") != 0)) {
-        virReportSystemError(rc, "%s",
+    if (virFileMakePath("/dev/pts") < 0) {
+        virReportSystemError(errno, "%s",
                              _("Cannot create /dev/pts"));
         goto cleanup;
     }
@@ -531,7 +531,7 @@ static int lxcContainerMountNewFS(virDomainDefPtr vmDef)
             return -1;
         }
 
-        if (virFileMakePath(vmDef->fss[i]->dst) != 0) {
+        if (virFileMakePath(vmDef->fss[i]->dst) < 0) {
             virReportSystemError(errno,
                                  _("Failed to create %s"),
                                  vmDef->fss[i]->dst);
index 7d60090ac8be079e82acf34b6cff7e4abb648141..31c7d4fd4f641bddc69fe95408e6e5ff81e76dbb 100644 (file)
@@ -690,7 +690,7 @@ lxcControllerRun(virDomainDefPtr def,
             goto cleanup;
         }
 
-        if (virFileMakePath(devpts) != 0) {
+        if (virFileMakePath(devpts) < 0) {
             virReportSystemError(errno,
                                  _("Failed to make path %s"),
                                  devpts);
index 7220a9b64e6b273d6e4bd77fe8c5f93fd2960de4..ffcfe4d9952a8056897f61775b073ba31c8f9c49 100644 (file)
@@ -1502,8 +1502,8 @@ static int lxcVmStart(virConnectPtr conn,
         return -1;
     }
 
-    if ((r = virFileMakePath(driver->logDir)) != 0) {
-        virReportSystemError(r,
+    if (virFileMakePath(driver->logDir) < 0) {
+        virReportSystemError(errno,
                              _("Cannot create log directory '%s'"),
                              driver->logDir);
         return -1;
@@ -2539,10 +2539,8 @@ static int lxcDomainSetAutostart(virDomainPtr dom,
         goto cleanup;
 
     if (autostart) {
-        int err;
-
-        if ((err = virFileMakePath(driver->autostartDir))) {
-            virReportSystemError(err,
+        if (virFileMakePath(driver->autostartDir) < 0) {
+            virReportSystemError(errno,
                                  _("Cannot create autostart directory %s"),
                                  driver->autostartDir);
             goto cleanup;
index 660dd65112e3cef912a0249c70142a957f0b1c2c..9759ce848f8d877a9fd2089c7e678dd8ee2a6046 100644 (file)
@@ -692,17 +692,16 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
     virCommandPtr cmd = NULL;
     char *pidfile = NULL;
     int ret = -1;
-    int err;
     dnsmasqContext *dctx = NULL;
 
-    if ((err = virFileMakePath(NETWORK_PID_DIR)) != 0) {
-        virReportSystemError(err,
+    if (virFileMakePath(NETWORK_PID_DIR) < 0) {
+        virReportSystemError(errno,
                              _("cannot create directory %s"),
                              NETWORK_PID_DIR);
         goto cleanup;
     }
-    if ((err = virFileMakePath(NETWORK_STATE_DIR)) != 0) {
-        virReportSystemError(err,
+    if (virFileMakePath(NETWORK_STATE_DIR) < 0) {
+        virReportSystemError(errno,
                              _("cannot create directory %s"),
                              NETWORK_STATE_DIR);
         goto cleanup;
@@ -713,8 +712,8 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
         goto cleanup;
     }
 
-    if ((err = virFileMakePath(DNSMASQ_STATE_DIR)) != 0) {
-        virReportSystemError(err,
+    if (virFileMakePath(DNSMASQ_STATE_DIR) < 0) {
+        virReportSystemError(errno,
                              _("cannot create directory %s"),
                              DNSMASQ_STATE_DIR);
         goto cleanup;
@@ -764,7 +763,7 @@ networkStartRadvd(virNetworkObjPtr network)
     char *configstr = NULL;
     char *configfile = NULL;
     virCommandPtr cmd = NULL;
-    int ret = -1, err, ii;
+    int ret = -1, ii;
     virNetworkIpDefPtr ipdef;
 
     network->radvdPid = -1;
@@ -777,14 +776,14 @@ networkStartRadvd(virNetworkObjPtr network)
         goto cleanup;
     }
 
-    if ((err = virFileMakePath(NETWORK_PID_DIR)) != 0) {
-        virReportSystemError(err,
+    if (virFileMakePath(NETWORK_PID_DIR) < 0) {
+        virReportSystemError(errno,
                              _("cannot create directory %s"),
                              NETWORK_PID_DIR);
         goto cleanup;
     }
-    if ((err = virFileMakePath(RADVD_STATE_DIR)) != 0) {
-        virReportSystemError(err,
+    if (virFileMakePath(RADVD_STATE_DIR) < 0) {
+        virReportSystemError(errno,
                              _("cannot create directory %s"),
                              RADVD_STATE_DIR);
         goto cleanup;
@@ -2526,7 +2525,7 @@ static int networkSetAutostart(virNetworkPtr net,
             goto cleanup;
 
         if (autostart) {
-            if (virFileMakePath(driver->networkAutostartDir)) {
+            if (virFileMakePath(driver->networkAutostartDir) < 0) {
                 virReportSystemError(errno,
                                      _("cannot create autostart directory '%s'"),
                                      driver->networkAutostartDir);
index cd43bf7de4c868e3775a877025ed4eaf1ed58266..52b7dfdcc705bf8fbbd1f21d78ea2abfec173962 100644 (file)
@@ -469,37 +469,37 @@ qemudStartup(int privileged) {
             goto out_of_memory;
     }
 
-    if (virFileMakePath(qemu_driver->stateDir) != 0) {
+    if (virFileMakePath(qemu_driver->stateDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create state dir '%s': %s"),
                   qemu_driver->stateDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(qemu_driver->libDir) != 0) {
+    if (virFileMakePath(qemu_driver->libDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create lib dir '%s': %s"),
                   qemu_driver->libDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(qemu_driver->cacheDir) != 0) {
+    if (virFileMakePath(qemu_driver->cacheDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create cache dir '%s': %s"),
                   qemu_driver->cacheDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(qemu_driver->saveDir) != 0) {
+    if (virFileMakePath(qemu_driver->saveDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create save dir '%s': %s"),
                   qemu_driver->saveDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(qemu_driver->snapshotDir) != 0) {
+    if (virFileMakePath(qemu_driver->snapshotDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create save dir '%s': %s"),
                   qemu_driver->snapshotDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }
-    if (virFileMakePath(qemu_driver->autoDumpPath) != 0) {
+    if (virFileMakePath(qemu_driver->autoDumpPath) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create dump dir '%s': %s"),
                   qemu_driver->autoDumpPath, virStrerror(errno, ebuf, sizeof ebuf));
@@ -586,8 +586,8 @@ qemudStartup(int privileged) {
         if (virAsprintf(&mempath, "%s/libvirt/qemu", qemu_driver->hugetlbfs_mount) < 0)
             goto out_of_memory;
 
-        if ((rc = virFileMakePath(mempath)) != 0) {
-            virReportSystemError(rc,
+        if (virFileMakePath(mempath) < 0) {
+            virReportSystemError(errno,
                                  _("unable to create hugepage path %s"), mempath);
             VIR_FREE(mempath);
             goto error;
@@ -5021,10 +5021,8 @@ static int qemudDomainSetAutostart(virDomainPtr dom,
             goto cleanup;
 
         if (autostart) {
-            int err;
-
-            if ((err = virFileMakePath(driver->autostartDir))) {
-                virReportSystemError(err,
+            if (virFileMakePath(driver->autostartDir) < 0) {
+                virReportSystemError(errno,
                                      _("cannot create autostart directory %s"),
                                      driver->autostartDir);
                 goto cleanup;
@@ -7489,7 +7487,6 @@ static int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
     int ret = -1;
     char *snapDir = NULL;
     char *snapFile = NULL;
-    int err;
     char uuidstr[VIR_UUID_STRING_BUFLEN];
 
     virUUIDFormat(vm->def->uuid, uuidstr);
@@ -7503,9 +7500,8 @@ static int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
         virReportOOMError();
         goto cleanup;
     }
-    err = virFileMakePath(snapDir);
-    if (err != 0) {
-        virReportSystemError(err, _("cannot create snapshot directory '%s'"),
+    if (virFileMakePath(snapDir) < 0) {
+        virReportSystemError(errno, _("cannot create snapshot directory '%s'"),
                              snapDir);
         goto cleanup;
     }
index f2c439b03e73ba8e625475f730b8977ccf06e016..c9145cbe9804be174ed6a083cec61374b5ae0515 100644 (file)
@@ -2448,7 +2448,7 @@ int qemuProcessStart(virConnectPtr conn,
         }
     }
 
-    if (virFileMakePath(driver->logDir) != 0) {
+    if (virFileMakePath(driver->logDir) < 0) {
         virReportSystemError(errno,
                              _("cannot create log directory %s"),
                              driver->logDir);
index f2912f0d896776dcac8f0f7110821b57f359cca2..d87401fd362ca14e3ee3d3b29e3b7121fbe34d1c 100644 (file)
@@ -559,8 +559,8 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
         /* assure all directories in the path prior to the final dir
          * exist, with default uid/gid/mode. */
         *p = '\0';
-        if ((err = virFileMakePath(parent)) != 0) {
-            virReportSystemError(err, _("cannot create path '%s'"),
+        if (virFileMakePath(parent) < 0) {
+            virReportSystemError(errno, _("cannot create path '%s'"),
                                  parent);
             goto error;
         }
index f9652f858f38bb4f546bcb7a80c95c92c095a4a7..a990118c4ccda26fd6810383c2b9037d908160fe 100644 (file)
@@ -1019,10 +1019,8 @@ storagePoolSetAutostart(virStoragePoolPtr obj,
 
     if (pool->autostart != autostart) {
         if (autostart) {
-            int err;
-
-            if ((err = virFileMakePath(driver->autostartDir))) {
-                virReportSystemError(err,
+            if (virFileMakePath(driver->autostartDir) < 0) {
+                virReportSystemError(errno,
                                      _("cannot create autostart directory %s"),
                                      driver->autostartDir);
                 goto cleanup;
index a71ea2174c87b499fb94d3300566bc0788c24a3c..f0f053bb00b30ab55bfa24dafcf0956ac785b648 100644 (file)
@@ -420,7 +420,7 @@ umlStartup(int privileged)
         goto error;
     }
 
-    if (virFileMakePath(uml_driver->monitorDir) != 0) {
+    if (virFileMakePath(uml_driver->monitorDir) < 0) {
         char ebuf[1024];
         VIR_ERROR(_("Failed to create monitor directory %s: %s"),
                uml_driver->monitorDir, virStrerror(errno, ebuf, sizeof ebuf));
@@ -839,7 +839,7 @@ static int umlStartVMDaemon(virConnectPtr conn,
         return -1;
     }
 
-    if (virFileMakePath(driver->logDir) != 0) {
+    if (virFileMakePath(driver->logDir) < 0) {
         virReportSystemError(errno,
                              _("cannot create log directory %s"),
                              driver->logDir);
@@ -2004,10 +2004,8 @@ static int umlDomainSetAutostart(virDomainPtr dom,
             goto cleanup;
 
         if (autostart) {
-            int err;
-
-            if ((err = virFileMakePath(driver->autostartDir))) {
-                virReportSystemError(err,
+            if (virFileMakePath(driver->autostartDir) < 0) {
+                virReportSystemError(errno,
                                      _("cannot create autostart directory %s"),
                                      driver->autostartDir);
                 goto cleanup;
index aadca105fb45f4bb81121499f91569f2d1c7fd88..55db96b11f583551bed2049a2a4be02b38bbffed 100644 (file)
@@ -523,11 +523,10 @@ dnsmasqAddHost(dnsmasqContext *ctx,
 int
 dnsmasqSave(const dnsmasqContext *ctx)
 {
-    int err;
     int ret = 0;
 
-    if ((err = virFileMakePath(ctx->config_dir))) {
-        virReportSystemError(err, _("cannot create config directory '%s'"),
+    if (virFileMakePath(ctx->config_dir) < 0) {
+        virReportSystemError(errno, _("cannot create config directory '%s'"),
                              ctx->config_dir);
         return -1;
     }
index 13973c359dadfbcb3c3d12deafdb8ac785c92761..4710fc50153434301d0ac4e399a29c26583f525b 100644 (file)
@@ -1010,66 +1010,79 @@ int virDirCreate(const char *path ATTRIBUTE_UNUSED,
 }
 #endif /* WIN32 */
 
-static int virFileMakePathHelper(char *path) {
+static int virFileMakePathHelper(char *path)
+{
     struct stat st;
     char *p = NULL;
-    int err;
 
     if (stat(path, &st) >= 0)
         return 0;
+    else if (errno != ENOENT)
+        return -1;
 
-    if ((p = strrchr(path, '/')) == NULL)
-        return EINVAL;
+    if ((p = strrchr(path, '/')) == NULL) {
+        errno = EINVAL;
+        return -1;
+    }
 
     if (p != path) {
         *p = '\0';
-        err = virFileMakePathHelper(path);
+
+        if (virFileMakePathHelper(path) < 0)
+            return -1;
+
         *p = '/';
-        if (err != 0)
-            return err;
     }
 
-    if (mkdir(path, 0777) < 0 && errno != EEXIST) {
-        return errno;
-    }
+    if (mkdir(path, 0777) < 0 && errno != EEXIST)
+        return -1;
+
     return 0;
 }
 
+/**
+ * Creates the given directory with mode 0777 if it's not already existing.
+ *
+ * Returns 0 on success, or -1 if an error occurred (in which case, errno
+ * is set appropriately).
+ */
 int virFileMakePath(const char *path)
 {
+    int ret = -1;
     struct stat st;
     char *parent = NULL;
     char *p;
-    int err = 0;
 
     if (stat(path, &st) >= 0)
+        return 0;
+    else if (errno != ENOENT)
         goto cleanup;
 
     if ((parent = strdup(path)) == NULL) {
-        err = ENOMEM;
+        errno = ENOMEM;
         goto cleanup;
     }
 
     if ((p = strrchr(parent, '/')) == NULL) {
-        err = EINVAL;
+        errno = EINVAL;
         goto cleanup;
     }
 
     if (p != parent) {
         *p = '\0';
-        if ((err = virFileMakePathHelper(parent)) != 0) {
+
+        if (virFileMakePathHelper(parent) < 0)
             goto cleanup;
-        }
     }
 
-    if (mkdir(path, 0777) < 0 && errno != EEXIST) {
-        err = errno;
+    if (mkdir(path, 0777) < 0 && errno != EEXIST)
         goto cleanup;
-    }
+
+    ret = 0;
 
 cleanup:
     VIR_FREE(parent);
-    return err;
+    return ret;
 }
 
 /* Build up a fully qualified path for a config file to be
@@ -1182,8 +1195,10 @@ int virFileWritePid(const char *dir,
         goto cleanup;
     }
 
-    if ((rc = virFileMakePath(dir)))
+    if (virFileMakePath(dir) < 0) {
+        rc = errno;
         goto cleanup;
+    }
 
     if (!(pidfile = virFilePid(dir, name))) {
         rc = ENOMEM;