dpkg: fix bug where existence check was reversed
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 17 Feb 2008 14:29:25 +0000 (14:29 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 17 Feb 2008 14:29:25 +0000 (14:29 -0000)
archival/dpkg.c

index 1db53f4..e90e82b 100644 (file)
@@ -913,20 +913,16 @@ static void write_status_file(deb_file_t **deb_file)
        fclose(old_status_file);
        fclose(new_status_file);
 
-
        /* Create a separate backfile to dpkg */
        if (rename("/var/lib/dpkg/status", "/var/lib/dpkg/status.udeb.bak") == -1) {
-               struct stat stat_buf;
-               xstat("/var/lib/dpkg/status", &stat_buf);
+               if (errno != ENOENT)
+                       bb_error_msg_and_die("cannot create backup status file");
                /* Its ok if renaming the status file fails because status
                 * file doesnt exist, maybe we are starting from scratch */
                bb_error_msg("no status file found, creating new one");
        }
 
-       if (rename("/var/lib/dpkg/status.udeb", "/var/lib/dpkg/status") == -1) {
-               bb_error_msg_and_die("DANGER: cannot create status file, "
-                       "you need to manually repair your status file");
-       }
+       xrename("/var/lib/dpkg/status.udeb", "/var/lib/dpkg/status");
 }
 
 /* This function returns TRUE if the given package can satisfy a
@@ -1344,7 +1340,7 @@ static void remove_package(const unsigned package_num, int noisy)
        free_array(exclude_files);
 
        /* rename <package>.conffile to <package>.list */
-       rename(conffile_name, list_name);
+       xrename(conffile_name, list_name);
 
        /* Change package status */
        set_status(status_num, "config-files", 3);