Просмотр исходного кода

libdpkg: Remove 'valid' member from struct pkginfoperfile

The two struct pkginfoperfile inside struct pkginfo are always valid,
as blankpackage does a blankpackageperfile on each. So there's no
actual need for the boolean member, neither for validity checks all
over the place and possible subsequent redundant initializations.

This is due to commit 5f100a01af636c14a600bf53b22e2ca3f2fcc546.
Guillem Jover лет назад: 16
Родитель
Сommit
50391de87a
15 измененных файлов с 75 добавлено и 105 удалено
  1. 0 1
      dpkg-deb/build.c
  2. 38 44
      dselect/pkgdepcon.cc
  3. 0 3
      dselect/pkglist.cc
  4. 1 1
      dselect/pkgsublist.cc
  5. 0 5
      lib/dpkg/database.c
  6. 0 1
      lib/dpkg/dpkg-db.h
  7. 11 12
      lib/dpkg/dump.c
  8. 1 4
      lib/dpkg/parse.c
  9. 1 5
      lib/dpkg/pkg-format.c
  10. 2 2
      src/enquiry.c
  11. 12 13
      src/packages.c
  12. 1 1
      src/pkg-show.c
  13. 6 10
      src/processarc.c
  14. 2 2
      src/query.c
  15. 0 1
      src/remove.c

+ 0 - 1
dpkg-deb/build.c

@@ -280,7 +280,6 @@ void do_build(const char *const *argv) {
     warns= 0; errs= 0;
     warns= 0; errs= 0;
     parsedb(controlfile, pdb_recordavailable|pdb_rejectstatus,
     parsedb(controlfile, pdb_recordavailable|pdb_rejectstatus,
             &checkedinfo, stderr, &warns);
             &checkedinfo, stderr, &warns);
-    assert(checkedinfo->available.valid);
     if (strspn(checkedinfo->name,
     if (strspn(checkedinfo->name,
                "abcdefghijklmnopqrstuvwxyz0123456789+-.")
                "abcdefghijklmnopqrstuvwxyz0123456789+-.")
         != strlen(checkedinfo->name))
         != strlen(checkedinfo->name))

+ 38 - 44
dselect/pkgdepcon.cc

@@ -53,24 +53,22 @@ pkginfoperfile *packagelist::findinfo(pkginfo *pkg) {
   r= useavailable(pkg) ? &pkg->available : &pkg->installed;
   r= useavailable(pkg) ? &pkg->available : &pkg->installed;
   if (debug)
   if (debug)
     fprintf(debug,"packagelist[%p]::findinfo(%s) useavailable=%d\n",this,pkg->name,useavailable(pkg));
     fprintf(debug,"packagelist[%p]::findinfo(%s) useavailable=%d\n",this,pkg->name,useavailable(pkg));
-  if (!r->valid) blankpackageperfile(r);
+
   return r;
   return r;
 }
 }
   
   
 int packagelist::checkdependers(pkginfo *pkg, int changemade) {
 int packagelist::checkdependers(pkginfo *pkg, int changemade) {
   struct deppossi *possi;
   struct deppossi *possi;
   
   
-  if (pkg->available.valid) {
-    for (possi= pkg->available.depended; possi; possi= possi->nextrev) {
-      if (!useavailable(possi->up->up)) continue;
-      changemade = max(changemade, resolvedepcon(possi->up));
-    }
+  for (possi = pkg->available.depended; possi; possi = possi->nextrev) {
+    if (!useavailable(possi->up->up))
+      continue;
+    changemade = max(changemade, resolvedepcon(possi->up));
   }
   }
-  if (pkg->installed.valid) {
-    for (possi= pkg->installed.depended; possi; possi= possi->nextrev) {
-      if (useavailable(possi->up->up)) continue;
-      changemade = max(changemade, resolvedepcon(possi->up));
-    }
+  for (possi = pkg->installed.depended; possi; possi = possi->nextrev) {
+    if (useavailable(possi->up->up))
+      continue;
+    changemade = max(changemade, resolvedepcon(possi->up));
   }
   }
   return changemade;
   return changemade;
 }
 }
@@ -274,7 +272,7 @@ int packagelist::resolvedepcon(dependency *depends) {
         foundany= 0;
         foundany= 0;
         if (possi->ed->clientdata) foundany= 1;
         if (possi->ed->clientdata) foundany= 1;
         if (dep_update_best_to_change_stop(best, possi->ed)) goto mustdeselect;
         if (dep_update_best_to_change_stop(best, possi->ed)) goto mustdeselect;
-        for (provider= possi->ed->available.valid ? possi->ed->available.depended : 0;
+        for (provider = possi->ed->available.depended;
              provider;
              provider;
              provider= provider->nextrev) {
              provider= provider->nextrev) {
           if (provider->up->type != dep_provides) continue;
           if (provider->up->type != dep_provides) continue;
@@ -340,8 +338,7 @@ int packagelist::resolvedepcon(dependency *depends) {
     if (depends->up != depends->list->ed) {
     if (depends->up != depends->list->ed) {
       r= deselect_one_of(depends->up, depends->list->ed, depends);  if (r) return r;
       r= deselect_one_of(depends->up, depends->list->ed, depends);  if (r) return r;
     }
     }
-    for (provider= depends->list->ed->available.valid ?
-                   depends->list->ed->available.depended : 0;
+    for (provider = depends->list->ed->available.depended;
          provider;
          provider;
          provider= provider->nextrev) {
          provider= provider->nextrev) {
       if (provider->up->type != dep_provides) continue;
       if (provider->up->type != dep_provides) continue;
@@ -398,37 +395,34 @@ packagelist::deppossatisfied(deppossi *possi, perpackagestate **fixbyupgrade)
   if (possi->verrel != dvr_none)
   if (possi->verrel != dvr_none)
     return false;
     return false;
   deppossi *provider;
   deppossi *provider;
-  if (possi->ed->installed.valid) {
-    for (provider= possi->ed->installed.depended;
-         provider;
-         provider= provider->nextrev) {
-      if (provider->up->type == dep_provides &&
-          provider->up->up->clientdata &&
-          !useavailable(provider->up->up) &&
-          would_like_to_install(provider->up->up->clientdata->selected,
-                                provider->up->up))
-        return true;
-    }
+
+  for (provider = possi->ed->installed.depended;
+       provider;
+       provider = provider->nextrev) {
+    if (provider->up->type == dep_provides &&
+        provider->up->up->clientdata &&
+        !useavailable(provider->up->up) &&
+        would_like_to_install(provider->up->up->clientdata->selected,
+                              provider->up->up))
+      return true;
   }
   }
-  if (possi->ed->available.valid) {
-    for (provider= possi->ed->available.depended;
-         provider;
-         provider= provider->nextrev) {
-      if (provider->up->type != dep_provides ||
-          !provider->up->up->clientdata ||
-          !would_like_to_install(provider->up->up->clientdata->selected,
-                                 provider->up->up))
-        continue;
-      if (useavailable(provider->up->up))
-        return true;
-      if (fixbyupgrade && !*fixbyupgrade &&
-          (!(provider->up->up->status == pkginfo::stat_installed ||
-             provider->up->up->status == pkginfo::stat_triggerspending ||
-             provider->up->up->status == pkginfo::stat_triggersawaited) ||
-           versioncompare(&provider->up->up->available.version,
-                          &provider->up->up->installed.version) > 1))
-        *fixbyupgrade= provider->up->up->clientdata;
-    }
+  for (provider = possi->ed->available.depended;
+       provider;
+       provider = provider->nextrev) {
+    if (provider->up->type != dep_provides ||
+        !provider->up->up->clientdata ||
+        !would_like_to_install(provider->up->up->clientdata->selected,
+                               provider->up->up))
+      continue;
+    if (useavailable(provider->up->up))
+      return true;
+    if (fixbyupgrade && !*fixbyupgrade &&
+        (!(provider->up->up->status == pkginfo::stat_installed ||
+           provider->up->up->status == pkginfo::stat_triggerspending ||
+           provider->up->up->status == pkginfo::stat_triggersawaited) ||
+         versioncompare(&provider->up->up->available.version,
+                        &provider->up->up->installed.version) > 1))
+      *fixbyupgrade = provider->up->up->clientdata;
   }
   }
   return false;
   return false;
 }
 }

+ 0 - 3
dselect/pkglist.cc

@@ -176,8 +176,6 @@ void packagelist::ensurestatsortinfo() {
         fprintf(debug,"packagelist[%p]::ensurestatsortinfos() i=%d pkg=%s\n",
         fprintf(debug,"packagelist[%p]::ensurestatsortinfos() i=%d pkg=%s\n",
                 this,index,table[index]->pkg->name);
                 this,index,table[index]->pkg->name);
       pkg= table[index]->pkg;
       pkg= table[index]->pkg;
-      if (!pkg->installed.valid) blankpackageperfile(&pkg->installed);
-      if (!pkg->available.valid) blankpackageperfile(&pkg->available);
       switch (pkg->status) {
       switch (pkg->status) {
       case pkginfo::stat_unpacked:
       case pkginfo::stat_unpacked:
       case pkginfo::stat_halfconfigured:
       case pkginfo::stat_halfconfigured:
@@ -397,7 +395,6 @@ packagelist::packagelist(keybindings *kb) : baselist(kb) {
         pkg->want != pkginfo::want_install) {
         pkg->want != pkginfo::want_install) {
       pkg->clientdata= 0; continue;
       pkg->clientdata= 0; continue;
     }
     }
-    if (!pkg->available.valid) blankpackageperfile(&pkg->available);
     // treat all unknown packages as already seen
     // treat all unknown packages as already seen
     state->direct= state->original= (pkg->want == pkginfo::want_unknown ? pkginfo::want_purge : pkg->want);
     state->direct= state->original= (pkg->want == pkginfo::want_unknown ? pkginfo::want_purge : pkg->want);
     if (readwrite && state->original == pkginfo::want_unknown) {
     if (readwrite && state->original == pkginfo::want_unknown) {

+ 1 - 1
dselect/pkgsublist.cc

@@ -149,7 +149,7 @@ packagelist::add(dependency *depends, showpriority displayimportance)
       // providers aren't relevant if a version was specified, or
       // providers aren't relevant if a version was specified, or
       // if we're looking at a provider relationship already
       // if we're looking at a provider relationship already
       deppossi *provider;
       deppossi *provider;
-      for (provider= possi->ed->available.valid ? possi->ed->available.depended : 0;
+      for (provider = possi->ed->available.depended;
            provider;
            provider;
            provider=provider->nextrev) {
            provider=provider->nextrev) {
         if (provider->up->type != dep_provides) continue;
         if (provider->up->type != dep_provides) continue;

+ 0 - 5
lib/dpkg/database.c

@@ -71,8 +71,6 @@ void blankpackage(struct pkginfo *pigp) {
   pigp->section= NULL;
   pigp->section= NULL;
   blankversion(&pigp->configversion);
   blankversion(&pigp->configversion);
   pigp->files= NULL;
   pigp->files= NULL;
-  pigp->installed.valid = false;
-  pigp->available.valid = false;
   pigp->clientdata= NULL;
   pigp->clientdata= NULL;
   pigp->trigaw.head = pigp->trigaw.tail = NULL;
   pigp->trigaw.head = pigp->trigaw.tail = NULL;
   pigp->othertrigaw_head = NULL;
   pigp->othertrigaw_head = NULL;
@@ -90,7 +88,6 @@ void blankpackageperfile(struct pkginfoperfile *pifp) {
   blankversion(&pifp->version);
   blankversion(&pifp->version);
   pifp->conffiles= NULL;
   pifp->conffiles= NULL;
   pifp->arbs= NULL;
   pifp->arbs= NULL;
-  pifp->valid = true;
 }
 }
 
 
 static int nes(const char *s) { return s && *s; }
 static int nes(const char *s) { return s && *s; }
@@ -109,8 +106,6 @@ informative(struct pkginfo *pkg, struct pkginfoperfile *info)
        informativeversion(&pkg->configversion)))
        informativeversion(&pkg->configversion)))
     /* We ignore Section and Priority, as these tend to hang around. */
     /* We ignore Section and Priority, as these tend to hang around. */
     return true;
     return true;
-  if (!info->valid)
-    return false;
   if (info->depends ||
   if (info->depends ||
       nes(info->description) ||
       nes(info->description) ||
       nes(info->maintainer) ||
       nes(info->maintainer) ||

+ 0 - 1
lib/dpkg/dpkg-db.h

@@ -102,7 +102,6 @@ struct filedetails {
 };
 };
 
 
 struct pkginfoperfile { /* pif */
 struct pkginfoperfile { /* pif */
-  bool valid;
   struct dependency *depends;
   struct dependency *depends;
   struct deppossi *depended;
   struct deppossi *depended;
   bool essential; /* The ‘essential’ flag, true = yes, false = no (absent). */
   bool essential; /* The ‘essential’ flag, true = yes, false = no (absent). */

+ 11 - 12
lib/dpkg/dump.c

@@ -101,7 +101,7 @@ void w_section(struct varbuf *vb,
 void w_charfield(struct varbuf *vb,
 void w_charfield(struct varbuf *vb,
                  const struct pkginfo *pigp, const struct pkginfoperfile *pifp,
                  const struct pkginfo *pigp, const struct pkginfoperfile *pifp,
                  enum fwriteflags flags, const struct fieldinfo *fip) {
                  enum fwriteflags flags, const struct fieldinfo *fip) {
-  const char *value= pifp->valid ? PKGPFIELD(pifp,fip->integer,const char*) : NULL;
+  const char *value = PKGPFIELD(pifp, fip->integer, const char *);
   if (!value || !*value) return;
   if (!value || !*value) return;
   if (flags&fw_printheader) {
   if (flags&fw_printheader) {
     varbufaddstr(vb,fip->name);
     varbufaddstr(vb,fip->name);
@@ -139,7 +139,7 @@ void w_filecharf(struct varbuf *vb,
 void w_booleandefno(struct varbuf *vb,
 void w_booleandefno(struct varbuf *vb,
                     const struct pkginfo *pigp, const struct pkginfoperfile *pifp,
                     const struct pkginfo *pigp, const struct pkginfoperfile *pifp,
                     enum fwriteflags flags, const struct fieldinfo *fip) {
                     enum fwriteflags flags, const struct fieldinfo *fip) {
-  bool value = pifp->valid ? PKGPFIELD(pifp, fip->integer, bool) : false;
+  bool value = PKGPFIELD(pifp, fip->integer, bool);
   if (!(flags&fw_printheader)) {
   if (!(flags&fw_printheader)) {
     varbufaddstr(vb, value ? "yes" : "no");
     varbufaddstr(vb, value ? "yes" : "no");
     return;
     return;
@@ -244,7 +244,6 @@ void w_dependency(struct varbuf *vb,
   const char *depdel;
   const char *depdel;
   struct dependency *dyp;
   struct dependency *dyp;
 
 
-  if (!pifp->valid) return;
   if (flags&fw_printheader)
   if (flags&fw_printheader)
     sprintf(fnbuf,"%s: ",fip->name);
     sprintf(fnbuf,"%s: ",fip->name);
   else
   else
@@ -266,7 +265,8 @@ void w_conffiles(struct varbuf *vb,
                  enum fwriteflags flags, const struct fieldinfo *fip) {
                  enum fwriteflags flags, const struct fieldinfo *fip) {
   struct conffile *i;
   struct conffile *i;
 
 
-  if (!pifp->valid || !pifp->conffiles || pifp == &pigp->available) return;
+  if (!pifp->conffiles || pifp == &pigp->available)
+    return;
   if (flags&fw_printheader)
   if (flags&fw_printheader)
     varbufaddstr(vb,"Conffiles:\n");
     varbufaddstr(vb,"Conffiles:\n");
   for (i=pifp->conffiles; i; i= i->next) {
   for (i=pifp->conffiles; i; i= i->next) {
@@ -286,7 +286,7 @@ w_trigpend(struct varbuf *vb,
 {
 {
   struct trigpend *tp;
   struct trigpend *tp;
 
 
-  if (!pifp->valid || pifp == &pigp->available || !pigp->trigpend_head)
+  if (pifp == &pigp->available || !pigp->trigpend_head)
     return;
     return;
 
 
   assert(pigp->status >= stat_triggersawaited &&
   assert(pigp->status >= stat_triggersawaited &&
@@ -309,7 +309,7 @@ w_trigaw(struct varbuf *vb,
 {
 {
   struct trigaw *ta;
   struct trigaw *ta;
 
 
-  if (!pifp->valid || pifp == &pigp->available || !pigp->trigaw.head)
+  if (pifp == &pigp->available || !pigp->trigaw.head)
     return;
     return;
 
 
   assert(pigp->status > stat_configfiles &&
   assert(pigp->status > stat_configfiles &&
@@ -333,11 +333,11 @@ void varbufrecord(struct varbuf *vb,
   for (fip= fieldinfos; fip->name; fip++) {
   for (fip= fieldinfos; fip->name; fip++) {
     fip->wcall(vb,pigp,pifp,fw_printheader,fip);
     fip->wcall(vb,pigp,pifp,fw_printheader,fip);
   }
   }
-  if (pifp->valid) {
-    for (afp= pifp->arbs; afp; afp= afp->next) {
-      varbufaddstr(vb,afp->name); varbufaddstr(vb,": ");
-      varbufaddstr(vb,afp->value); varbufaddc(vb,'\n');
-    }
+  for (afp = pifp->arbs; afp; afp = afp->next) {
+    varbufaddstr(vb, afp->name);
+    varbufaddstr(vb, ": ");
+    varbufaddstr(vb, afp->value);
+    varbufaddc(vb, '\n');
   }
   }
 }
 }
 
 
@@ -387,7 +387,6 @@ writedb(const char *filename, bool available, bool mustsync)
     pifp= available ? &pigp->available : &pigp->installed;
     pifp= available ? &pigp->available : &pigp->installed;
     /* Don't dump records which have no useful content. */
     /* Don't dump records which have no useful content. */
     if (!informative(pigp,pifp)) continue;
     if (!informative(pigp,pifp)) continue;
-    if (!pifp->valid) blankpackageperfile(pifp);
     varbufrecord(&vb,pigp,pifp);
     varbufrecord(&vb,pigp,pifp);
     varbufaddc(&vb,'\n'); varbufaddc(&vb,0);
     varbufaddc(&vb,'\n'); varbufaddc(&vb,0);
     if (fputs(vb.buf,file) < 0)
     if (fputs(vb.buf,file) < 0)

+ 1 - 4
lib/dpkg/parse.c

@@ -144,7 +144,7 @@ int parsedb(const char *filename, enum parsedbflags flags,
   for (;;) { /* loop per package */
   for (;;) { /* loop per package */
     memset(fieldencountered, 0, sizeof(fieldencountered));
     memset(fieldencountered, 0, sizeof(fieldencountered));
     blankpackage(&newpig);
     blankpackage(&newpig);
-    blankpackageperfile(newpifp);
+
 /* Skip adjacent new lines */
 /* Skip adjacent new lines */
     while(!EOF_mmap(dataptr, endptr)) {
     while(!EOF_mmap(dataptr, endptr)) {
       c= getc_mmap(dataptr); if (c!='\n' && c!=MSDOS_EOF_CHAR ) break;
       c= getc_mmap(dataptr); if (c!='\n' && c!=MSDOS_EOF_CHAR ) break;
@@ -332,8 +332,6 @@ int parsedb(const char *filename, enum parsedbflags flags,
 	versioncompare(&newpifp->version, &pifp->version) < 0)
 	versioncompare(&newpifp->version, &pifp->version) < 0)
       continue;
       continue;
 
 
-    if (!pifp->valid) blankpackageperfile(pifp);
-
     /* Copy the priority and section across, but don't overwrite existing
     /* Copy the priority and section across, but don't overwrite existing
      * values if the pdb_weakclassification flag is set.
      * values if the pdb_weakclassification flag is set.
      */
      */
@@ -461,7 +459,6 @@ void copy_dependency_links(struct pkginfo *pkg,
     dyp->up= pkg;
     dyp->up= pkg;
     for (dop= dyp->list; dop; dop= dop->next) {
     for (dop= dyp->list; dop; dop= dop->next) {
       addtopifp= available ? &dop->ed->available : &dop->ed->installed;
       addtopifp= available ? &dop->ed->available : &dop->ed->installed;
-      if (!addtopifp->valid) blankpackageperfile(addtopifp);
       dop->nextrev= addtopifp->depended;
       dop->nextrev= addtopifp->depended;
       dop->backrev= NULL;
       dop->backrev= NULL;
       if (addtopifp->depended)
       if (addtopifp->depended)

+ 1 - 5
lib/dpkg/pkg-format.c

@@ -206,10 +206,6 @@ pkg_format_show(const struct pkg_format_node *head,
 {
 {
 	struct varbuf vb = VARBUF_INIT, fb = VARBUF_INIT, wb = VARBUF_INIT;
 	struct varbuf vb = VARBUF_INIT, fb = VARBUF_INIT, wb = VARBUF_INIT;
 
 
-	/* Make sure we have package info available, even if it's all empty. */
-	if (!pif->valid)
-		blankpackageperfile(pif);
-
 	while (head) {
 	while (head) {
 		int ok;
 		int ok;
 		char fmt[16];
 		char fmt[16];
@@ -239,7 +235,7 @@ pkg_format_show(const struct pkg_format_node *head,
 					break;
 					break;
 				}
 				}
 
 
-			if (!fip->name && pif->valid) {
+			if (!fip->name) {
 				const struct arbitraryfield *afp;
 				const struct arbitraryfield *afp;
 
 
 				for (afp = pif->arbs; afp; afp = afp->next)
 				for (afp = pif->arbs; afp; afp = afp->next)

+ 2 - 2
src/enquiry.c

@@ -364,7 +364,6 @@ void predeppackage(const char *const *argv) {
          !pkg && possi;
          !pkg && possi;
          possi=possi->next) {
          possi=possi->next) {
       trypkg= possi->ed;
       trypkg= possi->ed;
-      if (!trypkg->available.valid) continue;
       if (trypkg->files && versionsatisfied(&trypkg->available,possi)) {
       if (trypkg->files && versionsatisfied(&trypkg->available,possi)) {
         if (trypkg->clientdata->istobe == itb_normal) { pkg= trypkg; break; }
         if (trypkg->clientdata->istobe == itb_normal) { pkg= trypkg; break; }
       }
       }
@@ -374,7 +373,8 @@ void predeppackage(const char *const *argv) {
            provider=provider->next) {
            provider=provider->next) {
         if (provider->up->type != dep_provides) continue;
         if (provider->up->type != dep_provides) continue;
         trypkg= provider->up->up;
         trypkg= provider->up->up;
-        if (!trypkg->available.valid || !trypkg->files) continue;
+        if (!trypkg->files)
+          continue;
         if (trypkg->clientdata->istobe == itb_normal) { pkg= trypkg; break; }
         if (trypkg->clientdata->istobe == itb_normal) { pkg= trypkg; break; }
       }
       }
     }
     }

+ 12 - 13
src/packages.c

@@ -338,7 +338,6 @@ static int deppossi_ok_found(struct pkginfo *possdependee,
   case stat_triggersawaited:
   case stat_triggersawaited:
   case stat_triggerspending:
   case stat_triggerspending:
   case stat_installed:
   case stat_installed:
-    assert(possdependee->installed.valid);
     if (checkversion && !versionsatisfied(&possdependee->installed,checkversion)) {
     if (checkversion && !versionsatisfied(&possdependee->installed,checkversion)) {
       varbufprintf(oemsgs, _("  Version of %s on system is %s.\n"),
       varbufprintf(oemsgs, _("  Version of %s on system is %s.\n"),
 		   possdependee->name,
 		   possdependee->name,
@@ -521,7 +520,6 @@ int dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
   ok= 2; /* 2=ok, 1=defer, 0=halt */
   ok= 2; /* 2=ok, 1=defer, 0=halt */
   debug(dbg_depcon,"checking dependencies of %s (- %s)",
   debug(dbg_depcon,"checking dependencies of %s (- %s)",
         pkg->name, removing ? removing->name : "<none>");
         pkg->name, removing ? removing->name : "<none>");
-  assert(pkg->installed.valid);
 
 
   anycannotfixbytrig = 0;
   anycannotfixbytrig = 0;
   canfixbytrig = NULL;
   canfixbytrig = NULL;
@@ -542,17 +540,18 @@ int dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
                                &matched,possi,&interestingwarnings,&oemsgs);
                                &matched,possi,&interestingwarnings,&oemsgs);
       if (thisf > found) found= thisf;
       if (thisf > found) found= thisf;
       if (found != 3 && possi->verrel == dvr_none) {
       if (found != 3 && possi->verrel == dvr_none) {
-        if (possi->ed->installed.valid) {
-          for (provider= possi->ed->installed.depended;
-               found != 3 && provider;
-               provider= provider->nextrev) {
-            if (provider->up->type != dep_provides) continue;
-            debug(dbg_depcondetail,"     checking provider %s",provider->up->up->name);
-            thisf= deppossi_ok_found(provider->up->up,pkg,removing,possi->ed,
-                                     &possfixbytrig,
-                                     &matched, NULL, &interestingwarnings, &oemsgs);
-            if (thisf > found) found= thisf;
-          }
+        for (provider = possi->ed->installed.depended;
+             found != 3 && provider;
+             provider = provider->nextrev) {
+          if (provider->up->type != dep_provides)
+            continue;
+          debug(dbg_depcondetail, "     checking provider %s",
+                provider->up->up->name);
+          thisf = deppossi_ok_found(provider->up->up, pkg, removing, possi->ed,
+                                    &possfixbytrig, &matched, NULL,
+                                    &interestingwarnings, &oemsgs);
+          if (thisf > found)
+            found = thisf;
         }
         }
       }
       }
       debug(dbg_depcondetail,"    found %d",found);
       debug(dbg_depcondetail,"    found %d",found);

+ 1 - 1
src/pkg-show.c

@@ -36,7 +36,7 @@ limiteddescription(struct pkginfo *pkg,
 {
 {
 	const char *pdesc, *p;
 	const char *pdesc, *p;
 
 
-	pdesc = pkg->installed.valid ? pkg->installed.description : NULL;
+	pdesc = pkg->installed.description;
 	if (!pdesc)
 	if (!pdesc)
 		pdesc = _("(no description available)");
 		pdesc = _("(no description available)");
 	p = strchr(pdesc, '\n');
 	p = strchr(pdesc, '\n');

+ 6 - 10
src/processarc.c

@@ -261,9 +261,6 @@ void process_archive(const char *filename) {
     forcibleerr(fc_architecture,
     forcibleerr(fc_architecture,
                 _("package architecture (%s) does not match system (%s)"),
                 _("package architecture (%s) does not match system (%s)"),
                 pkg->available.architecture,architecture);
                 pkg->available.architecture,architecture);
-    
-  if (!pkg->installed.valid) blankpackageperfile(&pkg->installed);
-  assert(pkg->available.valid);
 
 
   for (deconpil= deconfigure;
   for (deconpil= deconfigure;
        deconpil;
        deconpil;
@@ -295,13 +292,12 @@ void process_archive(const char *filename) {
       break;
       break;
     case dep_provides:
     case dep_provides:
       /* Look for things that conflict with what we provide. */
       /* Look for things that conflict with what we provide. */
-      if (dsearch->list->ed->installed.valid) {
-        for (psearch= dsearch->list->ed->installed.depended;
-             psearch;
-             psearch= psearch->nextrev) {
-          if (psearch->up->type != dep_conflicts) continue;
-          check_conflict(psearch->up, pkg, pfilename);
-        }
+      for (psearch = dsearch->list->ed->installed.depended;
+           psearch;
+           psearch = psearch->nextrev) {
+        if (psearch->up->type != dep_conflicts)
+          continue;
+        check_conflict(psearch->up, pkg, pfilename);
       }
       }
       break;
       break;
     case dep_suggests:
     case dep_suggests:

+ 2 - 2
src/query.c

@@ -89,7 +89,7 @@ list1package(struct pkginfo *pkg, bool *head, struct pkg_array *array)
 	const char *pdesc;
 	const char *pdesc;
 	int plen, vlen, dlen;
 	int plen, vlen, dlen;
 
 
-	pdesc = pkg->installed.valid ? pkg->installed.description : NULL;
+	pdesc = pkg->installed.description;
 	if (!pdesc) pdesc= _("(no description available)");
 	if (!pdesc) pdesc= _("(no description available)");
 
 
 	plen = strlen(array->pkgs[i]->name);
 	plen = strlen(array->pkgs[i]->name);
@@ -124,7 +124,7 @@ Desired=Unknown/Install/Remove/Purge/Hold\n\
     printf("\n");
     printf("\n");
     *head = true;
     *head = true;
   }
   }
-  if (!pkg->installed.valid) blankpackageperfile(&pkg->installed);
+
   limiteddescription(pkg,dw,&pdesc,&l);
   limiteddescription(pkg,dw,&pdesc,&l);
   printf(format,
   printf(format,
          "uihrp"[pkg->want],
          "uihrp"[pkg->want],

+ 0 - 1
src/remove.c

@@ -94,7 +94,6 @@ void deferred_remove(struct pkginfo *pkg) {
     return;
     return;
   }
   }
 
 
-  assert(pkg->installed.valid);
   if (pkg->installed.essential && pkg->status != stat_configfiles)
   if (pkg->installed.essential && pkg->status != stat_configfiles)
     forcibleerr(fc_removeessential, _("This is an essential package -"
     forcibleerr(fc_removeessential, _("This is an essential package -"
                 " it should not be removed."));
                 " it should not be removed."));