aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archival/dpkg.c12
-rw-r--r--dpkg.c12
2 files changed, 16 insertions, 8 deletions
diff --git a/archival/dpkg.c b/archival/dpkg.c
index 06d722c9d..9c8fffa9c 100644
--- a/archival/dpkg.c
+++ b/archival/dpkg.c
@@ -1184,7 +1184,7 @@ void remove_package(const unsigned int package_num)
printf("Removing %s ...\n", package_name);
/* run prerm script */
- return_value = run_package_script(package_name, "prem");
+ return_value = run_package_script(package_name, "prerm");
if (return_value == -1) {
error_msg_and_die("script failed, prerm failure");
}
@@ -1410,11 +1410,15 @@ extern int dpkg_main(int argc, char **argv)
if ((dpkg_opt & dpkg_opt_unpack) || (dpkg_opt & dpkg_opt_install)) {
status_node = (status_node_t *) xmalloc(sizeof(status_node_t));
status_node->package = deb_file[deb_count]->package;
- /* use reinstreq isnt changed to "ok" until the package control info
- * is written to the status file*/
- status_node->status = search_name_hashtable("install reinstreq not-installed");
+ /* Try and find a currently installed version of this package */
status_num = search_status_hashtable(name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]);
+ if ((status_hashtable[status_num] == NULL) ||
+ (status_hashtable[status_num]->status == 0)) {
+ /* reinstreq isnt changed to "ok" until the package control info
+ * is written to the status file*/
+ status_node->status = search_name_hashtable("install reinstreq not-installed");
+ }
status_hashtable[status_num] = status_node;
}
}
diff --git a/dpkg.c b/dpkg.c
index 06d722c9d..9c8fffa9c 100644
--- a/dpkg.c
+++ b/dpkg.c
@@ -1184,7 +1184,7 @@ void remove_package(const unsigned int package_num)
printf("Removing %s ...\n", package_name);
/* run prerm script */
- return_value = run_package_script(package_name, "prem");
+ return_value = run_package_script(package_name, "prerm");
if (return_value == -1) {
error_msg_and_die("script failed, prerm failure");
}
@@ -1410,11 +1410,15 @@ extern int dpkg_main(int argc, char **argv)
if ((dpkg_opt & dpkg_opt_unpack) || (dpkg_opt & dpkg_opt_install)) {
status_node = (status_node_t *) xmalloc(sizeof(status_node_t));
status_node->package = deb_file[deb_count]->package;
- /* use reinstreq isnt changed to "ok" until the package control info
- * is written to the status file*/
- status_node->status = search_name_hashtable("install reinstreq not-installed");
+ /* Try and find a currently installed version of this package */
status_num = search_status_hashtable(name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]);
+ if ((status_hashtable[status_num] == NULL) ||
+ (status_hashtable[status_num]->status == 0)) {
+ /* reinstreq isnt changed to "ok" until the package control info
+ * is written to the status file*/
+ status_node->status = search_name_hashtable("install reinstreq not-installed");
+ }
status_hashtable[status_num] = status_node;
}
}