]> err.no Git - dpkg/commitdiff
* main/remove.c (removal_bulk_remove_configfiles): Don't change the
authorScott James Remnant <keybuk@debian.org>
Fri, 12 Mar 2004 20:25:34 +0000 (20:25 +0000)
committerScott James Remnant <keybuk@debian.org>
Fri, 12 Mar 2004 20:25:34 +0000 (20:25 +0000)
"previous pointer" pointer if we remove the node from the linked list,
ensuring that if the next node is to be removed the right thing will
happen.  This corrects the bug where every second shared or diverted
conffile would be incorrectly deleted by dpkg.

ChangeLog
debian/changelog
main/remove.c

index 596aa2a620dac0f6693f463c58a4758a3b270a6e..1e9425deb96da2a6acb6fcd2eb942f6bec1a5575 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Fri Mar 12 19:02:21 GMT 2004 Scott James Remnant <scott@netsplit.com>
+
+  * main/remove.c (removal_bulk_remove_configfiles): Don't change the
+  "previous pointer" pointer if we remove the node from the linked list,
+  ensuring that if the next node is to be removed the right thing will
+  happen.
+
+  This corrects the bug where every second shared or diverted conffile
+  would be incorrectly deleted by dpkg.
 Fri Mar 12 15:05:52 GMT 2004 Scott James Remnant <scott@netsplit.com>
 
   * utils/start-stop-daemon.c: Don't require an argument for -V (version).
index a913ebaa5f73fa010189c4dff64df4f60bacc902..58b23e6ca70ed4eb1798e1e7e1f044f6228db804 100644 (file)
@@ -1,6 +1,10 @@
 dpkg (1.10.21) unstable; urgency=low
 
   * Don't require argument for start-stop-daemon -V.  Closes: #237589.
+  * Fix incorrect linked list node removal code that caused every second
+    shared or diverted conffile to be deleted by dpkg.
+    Closes: #10879, #33046, #47267, #90623, #98210, #109691, #146167.
+    Closes: #155456, #204275.
 
  -- Scott James Remnant <scott@netsplit.com>  UNRELEASED
 
index c40f219ce6612ebe2cf119b78c5801994fe33bc3..0337ddb59ee01c867e9011b5a1e4a158ed8518f2 100644 (file)
@@ -403,9 +403,7 @@ static void removal_bulk_remove_configfiles(struct pkginfo *pkg) {
      * are involved in diversions, except if we are the package doing the
      * diverting.
      */
-    for (lconffp= &pkg->installed.conffiles;
-         (conff= *lconffp) != 0;
-         lconffp= &conff->next) {
+    for (lconffp= &pkg->installed.conffiles; (conff= *lconffp) != 0; ) {
       for (searchfile= pkg->clientdata->files;
            searchfile && strcmp(searchfile->namenode->name,conff->name);
            searchfile= searchfile->next);
@@ -422,6 +420,7 @@ static void removal_bulk_remove_configfiles(struct pkginfo *pkg) {
       } else {
         debug(dbg_conffdetail,"removal_bulk set to new conffile `%s'",conff->name);
         conff->hash= NEWCONFFILEFLAG; /* yes, cast away const */
+        lconffp= &conff->next;
       }
     }
     modstatdb_note(pkg);