浏览代码

Use new package status setters instead of direct assignments

This does not apply for package constructors.
Guillem Jover 14 年之前
父节点
当前提交
7db64047f1
共有 13 个文件被更改,包括 102 次插入67 次删除
  1. 3 2
      lib/dpkg/parse.c
  2. 3 3
      lib/dpkg/pkg.c
  3. 3 2
      lib/dpkg/test/t-pkginfo.c
  4. 7 4
      lib/dpkg/triglib.c
  5. 6 3
      lib/dpkg/trignote.c
  6. 3 2
      src/archives.c
  7. 11 9
      src/cleanup.c
  8. 5 3
      src/configure.c
  9. 8 3
      src/help.c
  10. 16 15
      src/processarc.c
  11. 17 11
      src/remove.c
  12. 3 2
      src/select.c
  13. 17 8
      src/trigproc.c

+ 3 - 2
lib/dpkg/parse.c

@@ -3,7 +3,7 @@
  * parse.c - database file parsing, main package/field loop
  *
  * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
- * Copyright © 2006,2008-2011 Guillem Jover <guillem@debian.org>
+ * Copyright © 2006,2008-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -41,6 +41,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/parsedump.h>
 #include <dpkg/fdio.h>
 
@@ -272,7 +273,7 @@ pkg_parse_verify(struct parsedb_state *ps,
       (pkg->want == want_purge ||
        pkg->want == want_deinstall ||
        pkg->want == want_hold)) {
-    pkg->want = want_unknown;
+    pkg_set_want(pkg, want_unknown);
   }
 }
 

+ 3 - 3
lib/dpkg/pkg.c

@@ -95,9 +95,9 @@ pkg_blank(struct pkginfo *pkg)
 {
 	pkg->set = NULL;
 	pkg->arch_next = NULL;
-	pkg->status = stat_notinstalled;
-	pkg->eflag = eflag_ok;
-	pkg->want = want_unknown;
+	pkg_set_status(pkg, stat_notinstalled);
+	pkg_reset_eflags(pkg);
+	pkg_set_want(pkg, want_unknown);
 	pkg->priority = pri_unknown;
 	pkg->otherpriority = NULL;
 	pkg->section = NULL;

+ 3 - 2
lib/dpkg/test/t-pkginfo.c

@@ -2,7 +2,7 @@
  * libdpkg - Debian packaging suite library routines
  * t-pkginfo.c - test pkginfo handling
  *
- * Copyright © 2009 Guillem Jover <guillem@debian.org>
+ * Copyright © 2009-2010,2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@
 
 #include <dpkg/test.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 
 static void
 test_pkginfo_informative(void)
@@ -32,7 +33,7 @@ test_pkginfo_informative(void)
 	pkg_blank(&pkg);
 	test_fail(pkg_is_informative(&pkg, &pkg.installed));
 
-	pkg.want = want_purge;
+	pkg_set_want(&pkg, want_purge);
 	test_pass(pkg_is_informative(&pkg, &pkg.installed));
 
 	pkg_blank(&pkg);

+ 7 - 4
lib/dpkg/triglib.c

@@ -4,7 +4,7 @@
  *
  * Copyright © 2007 Canonical Ltd
  * Written by Ian Jackson <ian@chiark.greenend.org.uk>
- * Copyright © 2008-2011 Guillem Jover <guillem@debian.org>
+ * Copyright © 2008-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -34,6 +34,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/dlist.h>
 #include <dpkg/dir.h>
 #include <dpkg/trigdeferred.h>
@@ -94,7 +95,7 @@ trig_record_activation(struct pkginfo *pend, struct pkginfo *aw, const char *tri
 	if (aw && pend->status > stat_configfiles)
 		if (trig_note_aw(pend, aw)) {
 			if (aw->status > stat_triggersawaited)
-				aw->status = stat_triggersawaited;
+				pkg_set_status(aw, stat_triggersawaited);
 			modstatdb_note_ifwrite(aw);
 		}
 }
@@ -115,8 +116,10 @@ trig_clear_awaiters(struct pkginfo *notpend)
 			continue;
 		LIST_UNLINK_PART(aw->trigaw, ta, sameaw.);
 		if (!aw->trigaw.head && aw->status == stat_triggersawaited) {
-			aw->status = aw->trigpend_head ? stat_triggerspending :
-			             stat_installed;
+			if (aw->trigpend_head)
+				pkg_set_status(aw, stat_triggerspending);
+			else
+				pkg_set_status(aw, stat_installed);
 			modstatdb_note(aw);
 		}
 	}

+ 6 - 3
lib/dpkg/trignote.c

@@ -4,7 +4,7 @@
  *
  * Copyright © 2007 Canonical Ltd
  * Written by Ian Jackson <ian@chiark.greenend.org.uk>
- * Copyright © 2008-2011 Guillem Jover <guillem@debian.org>
+ * Copyright © 2008-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@
 
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/pkg-list.h>
 #include <dpkg/dlist.h>
 #include <dpkg/triglib.h>
@@ -63,8 +64,10 @@ trig_note_pend(struct pkginfo *pend, const char *trig)
 	if (!trig_note_pend_core(pend, trig))
 		return false;
 
-	pend->status = pend->trigaw.head ? stat_triggersawaited :
-	               stat_triggerspending;
+	if (pend->trigaw.head)
+		pkg_set_status(pend, stat_triggersawaited);
+	else
+		pkg_set_status(pend, stat_triggerspending);
 
 	return true;
 }

+ 3 - 2
src/archives.c

@@ -4,7 +4,7 @@
  *
  * Copyright © 1994,1995 Ian Jackson <ian@chiark.greenend.org.uk>
  * Copyright © 2000 Wichert Akkerman <wakkerma@debian.org>
- * Copyright © 2007-2011 Guillem Jover <guillem@debian.org>
+ * Copyright © 2007-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,6 +44,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/path.h>
 #include <dpkg/fdio.h>
 #include <dpkg/buffer.h>
@@ -1392,7 +1393,7 @@ wanttoinstall(struct pkginfo *pkg)
     if (f_alsoselect) {
       printf(_("Selecting previously unselected package %s.\n"),
              pkgbin_name(pkg, &pkg->available, pnaw_nonambig));
-      pkg->want = want_install;
+      pkg_set_want(pkg, want_install);
       return true;
     } else {
       printf(_("Skipping unselected package %s.\n"),

+ 11 - 9
src/cleanup.c

@@ -3,6 +3,7 @@
  * cleanup.c - cleanup functions, used when we need to unwind
  *
  * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
+ * Copyright © 2007-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -37,6 +38,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/options.h>
 
 #include "filesdb.h"
@@ -118,7 +120,7 @@ void cu_prermupgrade(int argc, void **argv) {
                              versiondescribe(&pkg->available.version,
                                              vdew_nonambig),
                              NULL);
-  pkg->eflag &= ~eflag_reinstreq;
+  pkg_clear_eflags(pkg, eflag_reinstreq);
   post_postinst_tasks(pkg, stat_installed);
   cleanup_pkg_failed--;
 }
@@ -172,7 +174,7 @@ void cu_prerminfavour(int argc, void **argv) {
                              versiondescribe(&infavour->available.version,
                                              vdew_nonambig),
                              NULL);
-  conflictor->eflag &= ~eflag_reinstreq;
+  pkg_clear_eflags(conflictor, eflag_reinstreq);
   post_postinst_tasks(conflictor, stat_installed);
   cleanup_conflictor_failed--;
 }
@@ -185,8 +187,8 @@ void cu_preinstverynew(int argc, void **argv) {
   if (cleanup_pkg_failed++) return;
   maintainer_script_new(pkg, POSTRMFILE, "post-removal", cidir, cidirrest,
                         "abort-install", NULL);
-  pkg->status= stat_notinstalled;
-  pkg->eflag &= ~eflag_reinstreq;
+  pkg_set_status(pkg, stat_notinstalled);
+  pkg_clear_eflags(pkg, eflag_reinstreq);
   pkgbin_blank(&pkg->installed);
   modstatdb_note(pkg);
   cleanup_pkg_failed--;
@@ -202,8 +204,8 @@ void cu_preinstnew(int argc, void **argv) {
                         "abort-install", versiondescribe(&pkg->installed.version,
                                                          vdew_nonambig),
                         NULL);
-  pkg->status= stat_configfiles;
-  pkg->eflag &= ~eflag_reinstreq;
+  pkg_set_status(pkg, stat_configfiles);
+  pkg_clear_eflags(pkg, eflag_reinstreq);
   modstatdb_note(pkg);
   cleanup_pkg_failed--;
 }
@@ -220,8 +222,8 @@ void cu_preinstupgrade(int argc, void **argv) {
                         versiondescribe(&pkg->installed.version,
                                         vdew_nonambig),
                         NULL);
-  pkg->status= *oldstatusp;
-  pkg->eflag &= ~eflag_reinstreq;
+  pkg_set_status(pkg, *oldstatusp);
+  pkg_clear_eflags(pkg, eflag_reinstreq);
   modstatdb_note(pkg);
   cleanup_pkg_failed--;
 }
@@ -243,7 +245,7 @@ void cu_prermremove(int argc, void **argv) {
 
   if (cleanup_pkg_failed++) return;
   maintainer_script_postinst(pkg, "abort-remove", NULL);
-  pkg->eflag &= ~eflag_reinstreq;
+  pkg_clear_eflags(pkg, eflag_reinstreq);
   post_postinst_tasks(pkg, *oldpkgstatus);
   cleanup_pkg_failed--;
 }

+ 5 - 3
src/configure.c

@@ -4,6 +4,7 @@
  *
  * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
  * Copyright © 1999, 2002 Wichert Akkerman <wichert@deephackmode.org>
+ * Copyright © 2007-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,6 +43,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/string.h>
 #include <dpkg/buffer.h>
 #include <dpkg/file.h>
@@ -324,7 +326,7 @@ deferred_configure(struct pkginfo *pkg)
 	trig_activate_packageprocessing(pkg);
 
 	if (f_noact) {
-		pkg->status = stat_installed;
+		pkg_set_status(pkg, stat_installed);
 		pkg->clientdata->istobe = itb_normal;
 		return;
 	}
@@ -350,7 +352,7 @@ deferred_configure(struct pkginfo *pkg)
 		for (conff = pkg->installed.conffiles; conff; conff = conff->next)
 			deferred_configure_conffile(pkg, conff);
 
-		pkg->status = stat_halfconfigured;
+		pkg_set_status(pkg, stat_halfconfigured);
 	}
 
 	assert(pkg->status == stat_halfconfigured);
@@ -363,7 +365,7 @@ deferred_configure(struct pkginfo *pkg)
 	                                           vdew_nonambig) : "",
 	                           NULL);
 
-	pkg->eflag = eflag_ok;
+	pkg_reset_eflags(pkg);
 	pkg->trigpend_head = NULL;
 	post_postinst_tasks(pkg, stat_installed);
 }

+ 8 - 3
src/help.c

@@ -3,6 +3,7 @@
  * help.c - various helper routines
  *
  * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
+ * Copyright © 2007-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,6 +37,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/path.h>
 #include <dpkg/subproc.h>
 #include <dpkg/command.h>
@@ -236,10 +238,13 @@ void
 post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status)
 {
   if (new_status < stat_triggersawaited)
-    pkg->status = new_status;
+    pkg_set_status(pkg, new_status);
+  else if (pkg->trigaw.head)
+    pkg_set_status(pkg, stat_triggersawaited);
+  else if (pkg->trigpend_head)
+    pkg_set_status(pkg, stat_triggerspending);
   else
-    pkg->status = pkg->trigaw.head ? stat_triggersawaited :
-                  pkg->trigpend_head ? stat_triggerspending : stat_installed;
+    pkg_set_status(pkg, stat_installed);
 
   post_postinst_tasks_core(pkg);
 }

+ 16 - 15
src/processarc.c

@@ -3,7 +3,7 @@
  * processarc.c - the huge function process_archive
  *
  * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
- * Copyright © 2006-2011 Guillem Jover <guillem@debian.org>
+ * Copyright © 2006-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,6 +42,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/path.h>
 #include <dpkg/buffer.h>
 #include <dpkg/subproc.h>
@@ -361,9 +362,9 @@ pkg_disappear(struct pkginfo *pkg, struct pkginfo *infavour)
   pkg_infodb_foreach(pkg, &pkg->installed, pkg_infodb_remove_file);
   dir_sync_path(pkgadmindir());
 
-  pkg->status = stat_notinstalled;
-  pkg->want = want_unknown;
-  pkg->eflag = eflag_ok;
+  pkg_set_status(pkg, stat_notinstalled);
+  pkg_set_want(pkg, want_unknown);
+  pkg_reset_eflags(pkg);
 
   blankversion(&pkg->configversion);
   pkgbin_blank(&pkg->installed);
@@ -670,8 +671,8 @@ void process_archive(const char *filename) {
       oldversionstatus == stat_triggersawaited ||
       oldversionstatus == stat_triggerspending ||
       oldversionstatus == stat_installed) {
-    pkg->eflag |= eflag_reinstreq;
-    pkg->status= stat_halfconfigured;
+    pkg_set_eflags(pkg, eflag_reinstreq);
+    pkg_set_status(pkg, stat_halfconfigured);
     modstatdb_note(pkg);
     push_cleanup(cu_prermupgrade, ~ehflag_normaltidy, NULL, 0, 1, (void *)pkg);
     if (versioncompare(&pkg->available.version,
@@ -682,7 +683,7 @@ void process_archive(const char *filename) {
       maintainer_script_installed(pkg, PRERMFILE, "pre-removal", "upgrade",
                                   versiondescribe(&pkg->available.version,
                                                   vdew_nonambig), NULL);
-    pkg->status= stat_unpacked;
+    pkg_set_status(pkg, stat_unpacked);
     oldversionstatus= stat_unpacked;
     modstatdb_note(pkg);
   }
@@ -699,7 +700,7 @@ void process_archive(const char *filename) {
              pkg_name(deconpil->pkg, pnaw_nonambig));
 
     trig_activate_packageprocessing(deconpil->pkg);
-    deconpil->pkg->status= stat_halfconfigured;
+    pkg_set_status(deconpil->pkg, stat_halfconfigured);
     modstatdb_note(deconpil->pkg);
 
     /* This means that we *either* go and run postinst abort-deconfigure,
@@ -733,7 +734,7 @@ void process_archive(const char *filename) {
           conflictor[i]->status == stat_triggerspending ||
           conflictor[i]->status == stat_installed)) continue;
     trig_activate_packageprocessing(conflictor[i]);
-    conflictor[i]->status= stat_halfconfigured;
+    pkg_set_status(conflictor[i], stat_halfconfigured);
     modstatdb_note(conflictor[i]);
     push_cleanup(cu_prerminfavour, ~ehflag_normaltidy, NULL, 0,
                  2,(void*)conflictor[i],(void*)pkg);
@@ -742,14 +743,14 @@ void process_archive(const char *filename) {
                                 versiondescribe(&pkg->available.version,
                                                 vdew_nonambig),
                                 NULL);
-    conflictor[i]->status= stat_halfinstalled;
+    pkg_set_status(conflictor[i], stat_halfinstalled);
     modstatdb_note(conflictor[i]);
   }
 
-  pkg->eflag |= eflag_reinstreq;
+  pkg_set_eflags(pkg, eflag_reinstreq);
   if (pkg->status == stat_notinstalled)
     pkg->installed.version= pkg->available.version;
-  pkg->status= stat_halfinstalled;
+  pkg_set_status(pkg, stat_halfinstalled);
   modstatdb_note(pkg);
   if (oldversionstatus == stat_notinstalled) {
     push_cleanup(cu_preinstverynew, ~ehflag_normaltidy, NULL, 0,
@@ -885,7 +886,7 @@ void process_archive(const char *filename) {
   if (oldversionstatus == stat_halfinstalled || oldversionstatus == stat_unpacked) {
     /* Packages that were in ‘installed’ and ‘postinstfailed’ have been
      * reduced to ‘unpacked’ by now, by the running of the prerm script. */
-    pkg->status= stat_halfinstalled;
+    pkg_set_status(pkg, stat_halfinstalled);
     modstatdb_note(pkg);
     push_cleanup(cu_postrmupgrade, ~ehflag_normaltidy, NULL, 0, 1, (void *)pkg);
     maintainer_script_alternative(pkg, POSTRMFILE, "post-removal", cidir, cidirrest,
@@ -1288,7 +1289,7 @@ void process_archive(const char *filename) {
    * The only thing that we have left to do with it is remove
    * backup files, and we can leave the user to fix that if and when
    * it happens (we leave the reinstall required flag, of course). */
-  pkg->status= stat_unpacked;
+  pkg_set_status(pkg, stat_unpacked);
   modstatdb_note(pkg);
 
   /* Now we delete all the backup files that we made when
@@ -1312,7 +1313,7 @@ void process_archive(const char *filename) {
 
   /* OK, we're now fully done with the main package.
    * This is quite a nice state, so we don't unwind past here. */
-  pkg->eflag = eflag_ok;
+  pkg_reset_eflags(pkg);
   modstatdb_note(pkg);
   push_checkpoint(~ehflag_bombout, ehflag_normaltidy);
 

+ 17 - 11
src/remove.c

@@ -3,6 +3,7 @@
  * remove.c - functionality for removing packages
  *
  * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
+ * Copyright © 2007-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,6 +37,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/dir.h>
 #include <dpkg/options.h>
 #include <dpkg/triglib.h>
@@ -106,8 +108,12 @@ void deferred_remove(struct pkginfo *pkg) {
     forcibleerr(fc_removeessential, _("This is an essential package -"
                 " it should not be removed."));
 
-  if (!f_pending)
-    pkg->want = (cipaction->arg_int == act_purge) ? want_purge : want_deinstall;
+  if (!f_pending) {
+    if (cipaction->arg_int == act_purge)
+      pkg_set_want(pkg, want_purge);
+    else
+      pkg_set_want(pkg, want_deinstall);
+  }
   if (!f_noact) modstatdb_note(pkg);
 
   debug(dbg_general, "checking dependencies for remove `%s'",
@@ -151,7 +157,7 @@ void deferred_remove(struct pkginfo *pkg) {
 
   if (f_noact) {
     printf(_("Would remove or purge %s ...\n"), pkg_name(pkg, pnaw_nonambig));
-    pkg->status= stat_notinstalled;
+    pkg_set_status(pkg, stat_notinstalled);
     pkg->clientdata->istobe= itb_normal;
     return;
   }
@@ -165,7 +171,7 @@ void deferred_remove(struct pkginfo *pkg) {
     static enum pkgstatus oldpkgstatus;
 
     oldpkgstatus= pkg->status;
-    pkg->status= stat_halfconfigured;
+    pkg_set_status(pkg, stat_halfconfigured);
     modstatdb_note(pkg);
     push_cleanup(cu_prermremove, ~ehflag_normaltidy, NULL, 0, 2,
                  (void *)pkg, (void *)&oldpkgstatus);
@@ -173,7 +179,7 @@ void deferred_remove(struct pkginfo *pkg) {
                                 "remove", NULL);
 
     /* Will turn into ‘half-installed’ soon ... */
-    pkg->status = stat_unpacked;
+    pkg_set_status(pkg, stat_unpacked);
   }
 
   removal_bulk(pkg);
@@ -214,7 +220,7 @@ removal_bulk_remove_files(struct pkginfo *pkg)
   static struct varbuf fnvb;
   struct stat stab;
 
-    pkg->status= stat_halfinstalled;
+    pkg_set_status(pkg, stat_halfinstalled);
     modstatdb_note(pkg);
     push_checkpoint(~ehflag_bombout, ehflag_normaltidy);
 
@@ -304,7 +310,7 @@ removal_bulk_remove_files(struct pkginfo *pkg)
     pkg_infodb_foreach(pkg, &pkg->installed, removal_bulk_remove_file);
     dir_sync_path(pkgadmindir());
 
-    pkg->status= stat_configfiles;
+    pkg_set_status(pkg, stat_configfiles);
     pkg->installed.essential = false;
     modstatdb_note(pkg);
     push_checkpoint(~ehflag_bombout, ehflag_normaltidy);
@@ -551,8 +557,8 @@ void removal_bulk(struct pkginfo *pkg) {
     /* If there are no config files and no postrm script then we
      * go straight into ‘purge’.  */
     debug(dbg_general, "removal_bulk no postrm, no conffiles, purging");
-    pkg->want= want_purge;
 
+    pkg_set_want(pkg, want_purge);
     blankversion(&pkg->configversion);
   } else if (pkg->want == want_purge) {
 
@@ -579,15 +585,15 @@ void removal_bulk(struct pkginfo *pkg) {
     if (unlink(filename) && errno != ENOENT)
       ohshite(_("can't remove old postrm script"));
 
-    pkg->status= stat_notinstalled;
-    pkg->want = want_unknown;
+    pkg_set_status(pkg, stat_notinstalled);
+    pkg_set_want(pkg, want_unknown);
 
     /* This will mess up reverse links, but if we follow them
      * we won't go back because pkg->status is stat_notinstalled. */
     pkgbin_blank(&pkg->installed);
   }
 
-  pkg->eflag = eflag_ok;
+  pkg_reset_eflags(pkg);
   modstatdb_note(pkg);
 
   debug(dbg_general, "removal done");

+ 3 - 2
src/select.c

@@ -3,6 +3,7 @@
  * select.c - by-hand (rather than dselect-based) package selection
  *
  * Copyright © 1995,1996 Ian Jackson <ian@chiark.greenend.org.uk>
+ * Copyright © 2006,2008-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -148,7 +149,7 @@ setselections(const char *const *argv)
     if (nv == NULL)
       ohshit(_("unknown wanted status at line %d: %.250s"), lno, selvb.buf);
     pkg = pkg_db_find(namevb.buf);
-    pkg->want = nv->value;
+    pkg_set_want(pkg, nv->value);
     if (c == EOF) break;
     lno++;
   }
@@ -174,7 +175,7 @@ clearselections(const char *const *argv)
   it = pkg_db_iter_new();
   while ((pkg = pkg_db_iter_next_pkg(it))) {
     if (!pkg->installed.essential)
-      pkg->want = want_deinstall;
+      pkg_set_want(pkg, want_deinstall);
   }
   pkg_db_iter_free(it);
 

+ 17 - 8
src/trigproc.c

@@ -4,6 +4,7 @@
  *
  * Copyright © 2007 Canonical Ltd
  * written by Ian Jackson <ian@chiark.greenend.org.uk>
+ * Copyright © 2008-2012 Guillem Jover <guillem@debian.org>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,6 +32,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/pkg.h>
 #include <dpkg/pkg-queue.h>
 #include <dpkg/triglib.h>
 
@@ -287,7 +289,7 @@ check_trigger_cycle(struct pkginfo *processing_now)
 	      pkg_name(giveup, pnaw_nonambig));
 	assert(giveup->status == stat_triggersawaited ||
 	       giveup->status == stat_triggerspending);
-	giveup->status = stat_halfconfigured;
+	pkg_set_status(giveup, stat_halfconfigured);
 	modstatdb_note(giveup);
 	print_error_perpackage(_("triggers looping, abandoned"),
 	                       giveup->set->name);
@@ -334,7 +336,7 @@ trigproc(struct pkginfo *pkg)
 
 		/* Setting the status to half-configured
 		 * causes modstatdb_note to clear pending triggers. */
-		pkg->status = stat_halfconfigured;
+		pkg_set_status(pkg, stat_halfconfigured);
 		modstatdb_note(pkg);
 
 		if (!f_noact) {
@@ -344,9 +346,12 @@ trigproc(struct pkginfo *pkg)
 		}
 
 		/* This is to cope if the package triggers itself: */
-		pkg->status = pkg->trigaw.head ? stat_triggersawaited :
-		              pkg->trigpend_head ? stat_triggerspending :
-		              stat_installed;
+		if (pkg->trigaw.head)
+			pkg_set_status(pkg, stat_triggersawaited);
+		else if (pkg->trigpend_head)
+			pkg_set_status(pkg, stat_triggerspending);
+		else
+			pkg_set_status(pkg, stat_installed);
 
 		post_postinst_tasks_core(pkg);
 	} else {
@@ -412,9 +417,13 @@ trig_transitional_activate(enum modstatdb_rw cstatus)
 		 * not in sync with the infodb files. */
 		if (pkg->status < stat_triggersawaited)
 			continue;
-		pkg->status = pkg->trigaw.head ? stat_triggersawaited :
-		              pkg->trigpend_head ? stat_triggerspending :
-		              stat_installed;
+
+		if (pkg->trigaw.head)
+			pkg_set_status(pkg, stat_triggersawaited);
+		else if (pkg->trigpend_head)
+			pkg_set_status(pkg, stat_triggerspending);
+		else
+			pkg_set_status(pkg, stat_installed);
 	}
 	pkg_db_iter_free(it);