The branch, master has been updated
       via  0fafaf6a2f43c487167a9bfa3f7abc55dcde582c (commit)
       via  89da651919808b9a732de7dc692f0eca8f14fc01 (commit)
       via  4e5846ccd3dcc33504aba8ef35a8962bccfd562e (commit)
       via  864201bea42d2d1d2c284e63800f8cb7ac2841fb (commit)
      from  85849a460dbedc4e9464725c7d317bedc76049df (commit)


- Log -----------------------------------------------------------------
commit 0fafaf6a2f43c487167a9bfa3f7abc55dcde582c
Author: Ian Jackson <[EMAIL PROTECTED]>
Date:   Wed Aug 8 06:05:17 2007 +0300

    Fix update-alternatives messing with spurious slave link spuriously.
    
    When a slave alternative is inapplicable do not attempt to create the
    slave link before removing it again.

commit 89da651919808b9a732de7dc692f0eca8f14fc01
Author: Guillem Jover <[EMAIL PROTECTED]>
Date:   Wed Aug 8 05:43:35 2007 +0300

    Do not print empty lines after 'Setting up ...' output.

commit 4e5846ccd3dcc33504aba8ef35a8962bccfd562e
Author: Guillem Jover <[EMAIL PROTECTED]>
Date:   Wed Aug 8 05:25:06 2007 +0300

    Use NULL instead of '(char *)0'.

commit 864201bea42d2d1d2c284e63800f8cb7ac2841fb
Author: Guillem Jover <[EMAIL PROTECTED]>
Date:   Wed Aug 8 04:57:16 2007 +0300

    Fix Breaks commit.
    
    Enable depisok for the Breaks case. Remove comments stating Breaks needs to
    be implemented. And split functions calls which had different arguments
    depending on a variable.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                      |   39 +++++++++++++++++++++++
 debian/changelog               |    4 ++
 dpkg-deb/build.c               |    8 +++--
 dpkg-deb/extract.c             |    5 ++-
 dpkg-deb/info.c                |    5 ++-
 scripts/update-alternatives.pl |   31 +++++++++---------
 src/cleanup.c                  |   42 +++++++++++++++---------
 src/configure.c                |   16 ++++-----
 src/depcon.c                   |   10 ------
 src/help.c                     |    6 ++--
 src/packages.c                 |    4 +--
 src/processarc.c               |   67 ++++++++++++++++++++++-----------------
 src/remove.c                   |    6 ++--
 13 files changed, 148 insertions(+), 95 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index cde65a7..53fccae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,42 @@
+2007-08-08  Ian Jackson  <[EMAIL PROTECTED]>
+
+       * scripts/update-alternatives.pl: In the case where the slave is
+       inapplicable do not attempt to create the slave link before
+       removing it again.
+
+2007-08-08  Guillem Jover  <[EMAIL PROTECTED]>
+
+       * src/configure.c (deferred_configure): Do not print a new line
+       if maintainer_script_installed returned true.
+
+2007-08-08  Guillem Jover  <[EMAIL PROTECTED]>
+
+       * dpkg-deb/build.c (do_build): Use NULL instead of '(char *)0'.
+       * dpkg-deb/extract.c (movecontrolfiles, extracthalf): Likewise.
+       * dpkg-deb/info.c (cu_info_prepare, info_prepare): Likewise.
+       * src/cleanup.c (cu_prermupgrade, cu_prermdeconfigure)
+       (cu_prerminfavour, cu_preinstverynew, cu_preinstnew)
+       (cu_preinstupgrade, cu_postrmupgrade, cu_prermremove): Likewise.
+       * src/configure.c (deferred_configure, suspend): Likewise.
+       * src/help.c (maintainer_script_alternative)
+       (ensure_pathname_nonexisting): Likewise.
+       * src/processarc.c (process_archive): Likewise.
+       * src/remove.c (deferred_remove, removal_bulk_remove_files)
+       (removal_bulk_remove_configfiles): Likewise.
+
+2007-08-08  Guillem Jover  <[EMAIL PROTECTED]>
+
+       * src/cleanup.c (cu_prermdeconfigure): Split call to
+       maintainer_script_installed depending on the conflictor variable.
+       * src/packages.c (dependencies_ok): Remove comment stating that
+       Breaks needs to be implemented.
+       * src/depcon.c (depisok): Likewise. Remove return at the beggining
+       of the function checking for a Breaks dependency, that was
+       efectively making it a no-op in that case.
+       * src/processarc.c (process_archive): Fix indentation. Split calls
+       in deconfigure code to printf and maintainer_script_installed
+       depending on the removing variable.
+
 2007-08-07  Guillem Jover  <[EMAIL PROTECTED]>
 
        * src/query.c (listpackages): Instead of allocating an additional
diff --git a/debian/changelog b/debian/changelog
index 6d8af60..0febdea 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -27,6 +27,10 @@ dpkg (1.14.6) UNRELEASED; urgency=low
     results with overlapping patterns on 'dpkg-query -W'. Closes: #428427
   * Tightening dpkg-dev versioned Depends to dpkg 1.14.6, and dpkg Conflicts
     against << dpkg-dev 1.14.6, where the perl modularization started.
+  * Do not print empty lines after 'Setting up ...' output. Closes: #392317
+  * When a slave alternative is inapplicable do not attempt to create the
+    slave link before removing it again. Closes: #411699
+    Thanks to Ian Jackson.
 
   [ Updated scripts translations ]
   * French (Frédéric Bothamy, Christian Perrier).
diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
index 31e6604..0177a74 100644
--- a/dpkg-deb/build.c
+++ b/dpkg-deb/build.c
@@ -324,7 +324,8 @@ void do_build(const char *const *argv) {
     m_dup2(p1[1],1); close(p1[0]); close(p1[1]);
     if (chdir(directory)) ohshite(_("failed to chdir to `%.255s'"),directory);
     if (chdir(BUILDCONTROLDIR)) ohshite(_("failed to chdir to .../DEBIAN"));
-    execlp(TAR,"tar","-cf","-",".",(char*)0); ohshite(_("failed to exec tar 
-cf"));
+    execlp(TAR, "tar", "-cf", "-", ".", NULL);
+    ohshite(_("failed to exec tar -cf"));
   }
   close(p1[1]);
   /* Create a temporary file to store the control data in. Immediately unlink
@@ -396,7 +397,7 @@ void do_build(const char *const *argv) {
     m_dup2(p1[0],0); close(p1[0]); close(p1[1]);
     m_dup2(p2[1],1); close(p2[0]); close(p2[1]);
     if (chdir(directory)) ohshite(_("failed to chdir to `%.255s'"),directory);
-    execlp(TAR,"tar","-cf", "-", "--null", "-T", "-", "--no-recursion", 
(char*)0);
+    execlp(TAR, "tar", "-cf", "-", "--null", "-T", "-", "--no-recursion", 
NULL);
     ohshite(_("failed to exec tar -cf"));
   }
   close(p1[0]);
@@ -417,7 +418,8 @@ void do_build(const char *const *argv) {
   if (!(c3= m_fork())) {
     m_dup2(p3[1],1); close(p3[0]); close(p3[1]);
     if (chdir(directory)) ohshite(_("failed to chdir to `%.255s'"),directory);
-    execlp(FIND,"find",".","-path","./" 
BUILDCONTROLDIR,"-prune","-o","-print0",(char*)0);
+    execlp(FIND, "find", ".", "-path", "./" BUILDCONTROLDIR, "-prune", "-o",
+           "-print0", NULL);
     ohshite(_("failed to exec find"));
   }
   close(p3[1]);
diff --git a/dpkg-deb/extract.c b/dpkg-deb/extract.c
index 1541980..24cc1c1 100644
--- a/dpkg-deb/extract.c
+++ b/dpkg-deb/extract.c
@@ -48,7 +48,8 @@ static void movecontrolfiles(const char *thing) {
   
   sprintf(buf, "mv %s/* . && rmdir %s", thing, thing);
   if (!(c1= m_fork())) {
-    execlp("sh","sh","-c",buf,(char*)0); ohshite(_("failed to exec sh -c mv 
foo/* &c"));
+    execlp("sh", "sh", "-c", buf, NULL);
+    ohshite(_("failed to exec sh -c mv foo/* &c"));
   }
   waitsubproc(c1,"sh -c mv foo/* &c",0);
 }
@@ -299,7 +300,7 @@ void extracthalf(const char *debar, const char *directory,
       strcat(buffer, "f");
       m_dup2(p2[0],0);
       close(p2[0]);
-      execlp(TAR,"tar",buffer,"-",(char*)0);
+      execlp(TAR, "tar", buffer, "-", NULL);
       ohshite(_("failed to exec tar"));
     }
     close(p2[0]);
diff --git a/dpkg-deb/info.c b/dpkg-deb/info.c
index 0cebf66..4024d02 100644
--- a/dpkg-deb/info.c
+++ b/dpkg-deb/info.c
@@ -50,7 +50,7 @@ static void cu_info_prepare(int argc, void **argv) {
   if (lstat(directory,&stab) && errno==ENOENT) return;
   if ((c1= fork()) == -1) { perror(_("failed to fork for cleanup")); return; }
   if (!c1) {
-    execlp(RM,"rm","-rf",directory,(char*)0);
+    execlp(RM, "rm", "-rf", directory, NULL);
     perror(_("failed to exec rm for cleanup")); _exit(1);
   }
   if (waitpid(c1,&status,0) != c1) { perror(_("failed to wait for rm 
cleanup")); return; }
@@ -72,7 +72,8 @@ static void info_prepare(const char *const **argvp,
   *directoryp= dbuf;
 
   if (!(c1= m_fork())) {
-    execlp(RM,"rm","-rf",dbuf,(char*)0); ohshite(_("failed to exec rm -rf"));
+    execlp(RM, "rm", "-rf", dbuf, NULL);
+    ohshite(_("failed to exec rm -rf"));
   }
   waitsubproc(c1,"rm -rf",0);
   push_cleanup(cu_info_prepare,-1, 0,0, 1, (void*)dbuf);
diff --git a/scripts/update-alternatives.pl b/scripts/update-alternatives.pl
index f851ccc..f0e7145 100755
--- a/scripts/update-alternatives.pl
+++ b/scripts/update-alternatives.pl
@@ -584,21 +584,6 @@ if ($mode eq 'auto') {
     for (my $j = 0; $j <= $#slavenames; $j++) {
         $sname= $slavenames[$j];
         $slink= $slavelinks[$j];
-
-       $linkname = readlink($slink);
-       if (!defined($linkname) && $! != ENOENT) {
-            &pr(sprintf(_g("warning: %s is supposed to be a slave symlink 
to\n".
-                " %s, or nonexistent; however, readlink failed: %s"), $slink, 
"$altdir/$sname", $!))
-               if $verbosemode > 0;
-       } elsif (!defined($linkname) ||
-                (defined($linkname) && $linkname ne "$altdir/$sname")) {
-            unlink("$slink.dpkg-tmp") || $! == &ENOENT ||
-                &quit(sprintf(_g("unable to ensure %s nonexistent: %s"), 
"$slink.dpkg-tmp", $!));
-            symlink("$altdir/$sname","$slink.dpkg-tmp") ||
-                &quit(sprintf(_g("unable to make %s a symlink to %s: %s"), 
"$slink.dpkg-tmp", "$altdir/$sname", $!));
-            rename_mv("$slink.dpkg-tmp",$slink) ||
-                &quit(sprintf(_g("unable to install %s as %s: %s"), 
"$slink.dpkg-tmp", $slink, $!));
-        }
         $spath= $slavepath{$bestnum,$j};
         unlink("$altdir/$sname.dpkg-tmp") || $! == &ENOENT ||
             &quit(sprintf(_g("unable to ensure %s nonexistent: %s"), 
"$altdir/$sname.dpkg-tmp", $!));
@@ -610,6 +595,22 @@ if ($mode eq 'auto') {
            unlink("$slink") || $! == &ENOENT ||
                &quit(sprintf(_g("unable to remove %s: %s"), $slink, $!));
         } else {
+           if (!defined($linkname= readlink($slink)) && $! != ENOENT) {
+               pr(sprintf(_g("warning: %s is supposed to be a slave symlink 
to\n".
+                             " %s, or nonexistent; however, readlink failed: 
%s"),
+                          $slink, "$altdir/$sname", $!))
+                   if $verbosemode > 0;
+           } elsif ($linkname ne "$altdir/$sname") {
+               unlink("$slink.dpkg-tmp") || $! == ENOENT ||
+                   quit(sprintf(_g("unable to ensure %s nonexistent: %s"),
+                                "$slink.dpkg-tmp", $!));
+               symlink("$altdir/$sname","$slink.dpkg-tmp") ||
+                   quit(sprintf(_g("unable to make %s a symlink to %s: %s"),
+                                "$slink.dpkg-tmp", "$altdir/$sname", $!));
+               rename_mv("$slink.dpkg-tmp",$slink) ||
+                   quit(sprintf(_g("unable to install %s as %s: %s"),
+                                "$slink.dpkg-tmp", $slink, $!));
+           }
             if (defined($linkname= readlink("$altdir/$sname")) && $linkname eq 
$spath) {
                 &pr(sprintf(_g("Leaving %s (%s) pointing to %s."), $sname, 
$slink, $spath))
                   if $verbosemode > 0;
diff --git a/src/cleanup.c b/src/cleanup.c
index 6a96836..108ee2c 100644
--- a/src/cleanup.c
+++ b/src/cleanup.c
@@ -111,7 +111,7 @@ void cu_prermupgrade(int argc, void **argv) {
                               "abort-upgrade",
                               versiondescribe(&pkg->available.version,
                                               vdew_nonambig),
-                              (char*)0);
+                              NULL);
   pkg->status= stat_installed;
   pkg->eflag &= ~eflagf_reinstreq;
   modstatdb_note(pkg);
@@ -132,15 +132,25 @@ void cu_prermdeconfigure(int argc, void **argv) {
   struct pkginfo *conflictor= (struct pkginfo*)argv[1]; /* may be 0 */
   struct pkginfo *infavour= (struct pkginfo*)argv[2];
 
-  maintainer_script_installed(deconf,POSTINSTFILE,"post-installation",
-                              "abort-deconfigure", "in-favour", infavour->name,
-                              versiondescribe(&infavour->available.version,
-                                              vdew_nonambig),
-                              conflictor ? "removing" : (char*)0,
-                              conflictor ? conflictor->name : (char*)0,
-                              conflictor ? 
versiondescribe(&conflictor->installed.version,
-                                                           vdew_nonambig) : 
(char*)0,
-                              (char*)0);
+  if (conflictor) {
+    maintainer_script_installed(deconf, POSTINSTFILE, "post-installation",
+                                "abort-deconfigure",
+                                "in-favour", infavour->name,
+                                versiondescribe(&infavour->available.version,
+                                                vdew_nonambig),
+                                "removing", conflictor->name,
+                                versiondescribe(&conflictor->installed.version,
+                                                vdew_nonambig),
+                                NULL);
+  } else {
+    maintainer_script_installed(deconf, POSTINSTFILE, "post-installation",
+                                "abort-deconfigure",
+                                "in-favour", infavour->name,
+                                versiondescribe(&infavour->available.version,
+                                                vdew_nonambig),
+                                NULL);
+  }
+
   deconf->status= stat_installed;
   modstatdb_note(deconf);
 }
@@ -154,7 +164,7 @@ void cu_prerminfavour(int argc, void **argv) {
                               "abort-remove", "in-favour", infavour->name,
                               versiondescribe(&infavour->available.version,
                                               vdew_nonambig),
-                              (char*)0);
+                              NULL);
   conflictor->status= stat_installed;
   conflictor->eflag &= ~eflagf_reinstreq;
   modstatdb_note(conflictor);
@@ -168,7 +178,7 @@ void cu_preinstverynew(int argc, void **argv) {
 
   if (cleanup_pkg_failed++) return;
   maintainer_script_new(pkg->name, POSTRMFILE,"post-removal",cidir,cidirrest,
-                        "abort-install",(char*)0);
+                        "abort-install", NULL);
   pkg->status= stat_notinstalled;
   pkg->eflag &= ~eflagf_reinstreq;
   blankpackageperfile(&pkg->installed);
@@ -185,7 +195,7 @@ void cu_preinstnew(int argc, void **argv) {
   maintainer_script_new(pkg->name, POSTRMFILE,"post-removal",cidir,cidirrest,
                         "abort-install", 
versiondescribe(&pkg->installed.version,
                                                          vdew_nonambig),
-                        (char*)0);
+                        NULL);
   pkg->status= stat_configfiles;
   pkg->eflag &= ~eflagf_reinstreq;
   modstatdb_note(pkg);
@@ -203,7 +213,7 @@ void cu_preinstupgrade(int argc, void **argv) {
                         "abort-upgrade",
                         versiondescribe(&pkg->installed.version,
                                         vdew_nonambig),
-                        (char*)0);
+                        NULL);
   pkg->status= *oldstatusp;
   pkg->eflag &= ~eflagf_reinstreq;
   modstatdb_note(pkg);
@@ -217,7 +227,7 @@ void cu_postrmupgrade(int argc, void **argv) {
   maintainer_script_installed(pkg,PREINSTFILE,"pre-installation",
                               "abort-upgrade", 
versiondescribe(&pkg->available.version,
                                                                vdew_nonambig),
-                              (char*)0);
+                              NULL);
   cleanup_pkg_failed--;
 }
 
@@ -226,7 +236,7 @@ void cu_prermremove(int argc, void **argv) {
 
   if (cleanup_pkg_failed++) return;
   maintainer_script_installed(pkg,POSTINSTFILE,"post-installation",
-                              "abort-remove", (char*)0);
+                              "abort-remove", NULL);
   pkg->status= stat_installed;
   pkg->eflag &= ~eflagf_reinstreq;
   modstatdb_note(pkg);
diff --git a/src/configure.c b/src/configure.c
index 0615728..23f9280 100644
--- a/src/configure.c
+++ b/src/configure.c
@@ -297,14 +297,12 @@ void deferred_configure(struct pkginfo *pkg) {
 
        modstatdb_note(pkg);
 
-       if (maintainer_script_installed(pkg, POSTINSTFILE, "post-installation",
-                               "configure",
-                               informativeversion(&pkg->configversion)
-                               ? versiondescribe(&pkg->configversion,
-                                       vdew_nonambig)
-                               : "",
-                               (char*)0))
-               putchar('\n');
+       maintainer_script_installed(pkg, POSTINSTFILE, "post-installation",
+                                   "configure",
+                                   informativeversion(&pkg->configversion) ?
+                                   versiondescribe(&pkg->configversion,
+                                                   vdew_nonambig) : "",
+                                   NULL);
 
        pkg->status= stat_installed;
        pkg->eflag= eflagv_ok;
@@ -504,7 +502,7 @@ static void suspend(void) {
                        if (!s || !*s)
                                s=DEFAULTSHELL;
 
-                       execlp(s,s,"-i",(char*)0);
+                       execlp(s, s, "-i", NULL);
                        ohshite(_("failed to exec shell (%.250s)"),s);
                }
 
diff --git a/src/depcon.c b/src/depcon.c
index 24f93ae..5f7f285 100644
--- a/src/depcon.c
+++ b/src/depcon.c
@@ -243,16 +243,6 @@ int depisok(struct dependency *dep, struct varbuf *whynot,
     internerr("unknown istobe depending");
   }
 
-  if (dep->type == dep_breaks)
-    /* We don't implement this and we can only be in this state
-     * if either a Breaks-ignorant or a Breaks-supporting dpkg
-     * installed the package.  In both cases it's probably too
-     * late to do anything useful about it now in this version
-     * so we just ignore it and hope.
-     * FIXME: implement Breaks
-     */
-    return 1;
-
   /* Describe the dependency, in case we have to moan about it. */
   varbufreset(whynot);
   varbufaddc(whynot, ' ');
diff --git a/src/help.c b/src/help.c
index ba4a845..7f29543 100644
--- a/src/help.c
+++ b/src/help.c
@@ -348,7 +348,7 @@ int maintainer_script_alternative(struct pkginfo *pkg,
   arglist= buildarglist(scriptname,
                         ifok,versiondescribe(&pkg->available.version,
                                              vdew_nonambig),
-                        (char*)0);
+                        NULL);
   sprintf(buf,_("old %s script"),description);
   if (stat(oldscriptpath,&stab)) {
     if (errno == ENOENT) {
@@ -369,7 +369,7 @@ int maintainer_script_alternative(struct pkginfo *pkg,
   arglist= buildarglist(scriptname,
                         iffallback,versiondescribe(&pkg->installed.version,
                                                    vdew_nonambig),
-                        (char*)0);
+                        NULL);
   strcpy(cidirrest,scriptname);
   sprintf(buf,_("new %s script"),description);
 
@@ -515,7 +515,7 @@ void ensure_pathname_nonexisting(const char *pathname) {
   }
   c1= m_fork();
   if (!c1) {
-    execlp(RM,"rm","-rf","--",pathname,(char*)0);
+    execlp(RM, "rm", "-rf", "--", pathname, NULL);
     ohshite(_("failed to exec rm for cleanup"));
   }
   debug(dbg_eachfile,"ensure_pathname_nonexisting running rm -rf");
diff --git a/src/packages.c b/src/packages.c
index ebbd5a9..467a6d4 100644
--- a/src/packages.c
+++ b/src/packages.c
@@ -425,9 +425,7 @@ int dependencies_ok(struct pkginfo *pkg, struct pkginfo 
*removing,
   debug(dbg_depcon,"checking dependencies of %s (- %s)",
         pkg->name, removing ? removing->name : "<none>");
   assert(pkg->installed.valid);
-  /* To implement Breaks we need to add code here which prevents
-   * configuration of Broken packages.
-   * FIXME: implement Breaks */
+
   for (dep= pkg->installed.depends; dep; dep= dep->next) {
     if (dep->type != dep_depends && dep->type != dep_predepends) continue;
     debug(dbg_depcondetail,"  checking group ...");
diff --git a/src/processarc.c b/src/processarc.c
index 31f28e9..cb69504 100644
--- a/src/processarc.c
+++ b/src/processarc.c
@@ -113,7 +113,7 @@ void process_archive(const char *filename) {
     push_cleanup(cu_pathname,~0, 0,0, 1,(void*)reasmbuf);
     c1= m_fork();
     if (!c1) {
-      execlp(SPLITTER, SPLITTER,"-Qao",reasmbuf,filename,(char*)0);
+      execlp(SPLITTER, SPLITTER, "-Qao", reasmbuf, filename, NULL);
       ohshite(_("failed to exec dpkg-split to see if it's part of a 
multiparter"));
     }
     while ((r= waitpid(c1,&status,0)) == -1 && errno == EINTR);
@@ -184,7 +184,7 @@ void process_archive(const char *filename) {
   c1= m_fork();
   if (!c1) {
     cidirrest[-1]= 0;
-    execlp(BACKEND, BACKEND,"--control",filename,cidir,(char*)0);
+    execlp(BACKEND, BACKEND, "--control", filename, cidir, NULL);
     ohshite(_("failed to exec dpkg-deb to extract control information"));
   }
   waitsubproc(c1,BACKEND " --control",0);
@@ -398,34 +398,43 @@ void process_archive(const char *filename) {
     modstatdb_note(pkg);
   }
 
-    for (deconpil= deconfigure; deconpil; deconpil= deconpil->next) {
-      struct pkginfo *removing= deconpil->xinfo;
+  for (deconpil= deconfigure; deconpil; deconpil= deconpil->next) {
+    struct pkginfo *removing= deconpil->xinfo;
 
-      printf(removing ?
-             _("De-configuring %s, to allow removal of %s ...\n") :
-             _("De-configuring %s ...\n"),
-             deconpil->pkg->name, removing ? removing->name : 0);
+    if (removing)
+      printf(_("De-configuring %s, to allow removal of %s ...\n"),
+             deconpil->pkg->name, removing->name);
+    else
+      printf(_("De-configuring %s ...\n"), deconpil->pkg->name);
 
-      deconpil->pkg->status= stat_halfconfigured;
-      modstatdb_note(deconpil->pkg);
-      /* This means that we *either* go and run postinst abort-deconfigure,
-       * *or* queue the package for later configure processing, depending
-       * on which error cleanup route gets taken.
-       */
-      push_cleanup(cu_prermdeconfigure,~ehflag_normaltidy,
-                   ok_prermdeconfigure,ehflag_normaltidy,
-                   3,(void*)deconpil->pkg,
-                   (void*)removing, (void*)pkg);
+    deconpil->pkg->status= stat_halfconfigured;
+    modstatdb_note(deconpil->pkg);
+
+    /* This means that we *either* go and run postinst abort-deconfigure,
+     * *or* queue the package for later configure processing, depending
+     * on which error cleanup route gets taken.
+     */
+    push_cleanup(cu_prermdeconfigure, ~ehflag_normaltidy,
+                 ok_prermdeconfigure, ehflag_normaltidy,
+                 3, (void*)deconpil->pkg, (void*)removing, (void*)pkg);
+
+    if (removing) {
       maintainer_script_installed(deconpil->pkg, PRERMFILE, "pre-removal",
                                   "deconfigure", "in-favour", pkg->name,
                                   versiondescribe(&pkg->available.version,
                                                   vdew_nonambig),
-                                  removing ? "removing" : (char*)0,
-                                  removing ? removing->name : (char*)0,
-                                  removing ? 
versiondescribe(&removing->installed.version,
-                                                             vdew_nonambig) : 
(char*)0,
-                                  (char*)0);
+                                  "removing", removing->name,
+                                  versiondescribe(&removing->installed.version,
+                                                  vdew_nonambig),
+                                  NULL);
+    } else {
+      maintainer_script_installed(deconpil->pkg, PRERMFILE, "pre-removal",
+                                  "deconfigure", "in-favour", pkg->name,
+                                  versiondescribe(&pkg->available.version,
+                                                  vdew_nonambig),
+                                  NULL);
     }
+  }
 
   for (i = 0 ; i < cflict_index; i++) {
     if (!(conflictor[i]->status == stat_halfconfigured ||
@@ -438,7 +447,7 @@ void process_archive(const char *filename) {
                                 "remove", "in-favour", pkg->name,
                                 versiondescribe(&pkg->available.version,
                                                 vdew_nonambig),
-                                (char*)0);
+                                NULL);
     conflictor[i]->status= stat_halfinstalled;
     modstatdb_note(conflictor[i]);
   }
@@ -452,21 +461,21 @@ void process_archive(const char *filename) {
     push_cleanup(cu_preinstverynew,~ehflag_normaltidy, 0,0,
                  3,(void*)pkg,(void*)cidir,(void*)cidirrest);
     maintainer_script_new(pkg->name, PREINSTFILE, "pre-installation", cidir, 
cidirrest,
-                          "install", (char*)0);
+                          "install", NULL);
   } else if (oldversionstatus == stat_configfiles) {
     push_cleanup(cu_preinstnew,~ehflag_normaltidy, 0,0,
                  3,(void*)pkg,(void*)cidir,(void*)cidirrest);
     maintainer_script_new(pkg->name, PREINSTFILE, "pre-installation", cidir, 
cidirrest,
                           "install", versiondescribe(&pkg->installed.version,
                                                      vdew_nonambig),
-                          (char*)0);
+                          NULL);
   } else {
     push_cleanup(cu_preinstupgrade,~ehflag_normaltidy, 0,0,
                  
4,(void*)pkg,(void*)cidir,(void*)cidirrest,(void*)&oldversionstatus);
     maintainer_script_new(pkg->name, PREINSTFILE, "pre-installation", cidir, 
cidirrest,
                           "upgrade", versiondescribe(&pkg->installed.version,
                                                      vdew_nonambig),
-                          (char*)0);
+                          NULL);
     printf(_("Unpacking replacement %.250s ...\n"),pkg->name);
   }
   
@@ -547,7 +556,7 @@ void process_archive(const char *filename) {
   c1= m_fork();
   if (!c1) {
     m_dup2(p1[1],1); close(p1[0]); close(p1[1]);
-    execlp(BACKEND, BACKEND, "--fsys-tarfile", filename, (char*)0);
+    execlp(BACKEND, BACKEND, "--fsys-tarfile", filename, NULL);
     ohshite(_("unable to exec dpkg-deb to get filesystem archive"));
   }
   close(p1[1]);
@@ -972,7 +981,7 @@ void process_archive(const char *filename) {
                                 "disappear", pkg->name, 
                                 versiondescribe(&pkg->available.version,
                                                 vdew_nonambig),
-                                (char*)0);
+                                NULL);
 
     /* OK, now we delete all the stuff in the `info' directory .. */
     varbufreset(&fnvb);
diff --git a/src/remove.c b/src/remove.c
index 5fccac6..abcfc9f 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -170,7 +170,7 @@ void deferred_remove(struct pkginfo *pkg) {
       modstatdb_note(pkg);
       push_cleanup(cu_prermremove,~ehflag_normaltidy, 0,0, 1,(void*)pkg);
       maintainer_script_installed(pkg, PRERMFILE, "pre-removal",
-                                  "remove", (char*)0);
+                                  "remove", NULL);
     }
 
     pkg->status= stat_unpacked; /* Will turn into halfinstalled soon ... */
@@ -283,7 +283,7 @@ static void removal_bulk_remove_files(
     }
     write_filelist_except(pkg,leftover,0);
     maintainer_script_installed(pkg, POSTRMFILE, "post-removal",
-                                "remove", (char*)0);
+                                "remove", NULL);
     varbufreset(&fnvb);
     varbufaddstr(&fnvb,admindir);
     varbufaddstr(&fnvb,"/" INFODIR);
@@ -512,7 +512,7 @@ static void removal_bulk_remove_configfiles(struct pkginfo 
*pkg) {
     modstatdb_note(pkg);
         
     maintainer_script_installed(pkg, POSTRMFILE, "post-removal",
-                                "purge", (char*)0);
+                                "purge", NULL);
 }
 
 void removal_bulk(struct pkginfo *pkg) {

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to