]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
dnsmasq: Fix errno handling and don't unlink non-existing files
authorMatthias Bolte <matthias.bolte@googlemail.com>
Tue, 28 Jun 2011 23:50:06 +0000 (01:50 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 29 Jun 2011 09:38:36 +0000 (11:38 +0200)
addnhostsSave and hostsfileSave expect < 0 return value on error from
addnhostsWrite and hostsfileWrite but then pass err instead of -err
to virReportSystemError that expects an errno value.

Also addnhostsWrite returns -ENOMEM and errno, change this to -errno.

addnhostsWrite and hostsfileWrite tried to unlink the tempfile after
renaming it, making both fail on the final step. Remove the unnecessary
unlink calls.

src/util/dnsmasq.c

index 5baa34f6cb7cba91c0a4c219d38d53ac8f826191..aadca105fb45f4bb81121499f91569f2d1c7fd88 100644 (file)
@@ -185,14 +185,14 @@ addnhostsWrite(const char *path,
     if (!(f = fopen(tmp, "w"))) {
         istmp = false;
         if (!(f = fopen(path, "w"))) {
-            rc = errno;
+            rc = -errno;
             goto cleanup;
         }
     }
 
     for (i = 0; i < nhosts; i++) {
         if (fputs(hosts[i].ip, f) == EOF || fputc('\t', f) == EOF) {
-            rc = errno;
+            rc = -errno;
             VIR_FORCE_FCLOSE(f);
 
             if (istmp)
@@ -203,7 +203,7 @@ addnhostsWrite(const char *path,
 
         for (ii = 0; ii < hosts[i].nhostnames; ii++) {
             if (fputs(hosts[i].hostnames[ii], f) == EOF || fputc('\t', f) == EOF) {
-                rc = errno;
+                rc = -errno;
                 VIR_FORCE_FCLOSE(f);
 
                 if (istmp)
@@ -214,7 +214,7 @@ addnhostsWrite(const char *path,
         }
 
         if (fputc('\n', f) == EOF) {
-            rc = errno;
+            rc = -errno;
             VIR_FORCE_FCLOSE(f);
 
             if (istmp)
@@ -225,21 +225,14 @@ addnhostsWrite(const char *path,
     }
 
     if (VIR_FCLOSE(f) == EOF) {
-        rc = errno;
+        rc = -errno;
         goto cleanup;
     }
 
-    if (istmp) {
-        if (rename(tmp, path) < 0) {
-            rc = errno;
-            unlink(tmp);
-            goto cleanup;
-        }
-
-        if (unlink(tmp) < 0) {
-            rc = errno;
-            goto cleanup;
-        }
+    if (istmp && rename(tmp, path) < 0) {
+        rc = -errno;
+        unlink(tmp);
+        goto cleanup;
     }
 
  cleanup:
@@ -255,7 +248,7 @@ addnhostsSave(dnsmasqAddnHostsfile *addnhostsfile)
                              addnhostsfile->nhosts);
 
     if (err < 0) {
-        virReportSystemError(err, _("cannot write config file '%s'"),
+        virReportSystemError(-err, _("cannot write config file '%s'"),
                              addnhostsfile->path);
         return -1;
     }
@@ -402,17 +395,10 @@ hostsfileWrite(const char *path,
         goto cleanup;
     }
 
-    if (istmp) {
-        if (rename(tmp, path) < 0) {
-            rc = -errno;
-            unlink(tmp);
-            goto cleanup;
-        }
-
-        if (unlink(tmp) < 0) {
-            rc = -errno;
-            goto cleanup;
-        }
+    if (istmp && rename(tmp, path) < 0) {
+        rc = -errno;
+        unlink(tmp);
+        goto cleanup;
     }
 
  cleanup:
@@ -428,7 +414,7 @@ hostsfileSave(dnsmasqHostsfile *hostsfile)
                              hostsfile->nhosts);
 
     if (err < 0) {
-        virReportSystemError(err, _("cannot write config file '%s'"),
+        virReportSystemError(-err, _("cannot write config file '%s'"),
                              hostsfile->path);
         return -1;
     }