Sfoglia il codice sorgente

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 anni fa
parent
commit
50391de87a

+ 0 - 1
dpkg-deb/build.c

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

+ 38 - 44
dselect/pkgdepcon.cc

@@ -53,24 +53,22 @@ pkginfoperfile *packagelist::findinfo(pkginfo *pkg) {
   r= useavailable(pkg) ? &pkg->available : &pkg->installed;
   if (debug)
     fprintf(debug,"packagelist[%p]::findinfo(%s) useavailable=%d\n",this,pkg->name,useavailable(pkg));
-  if (!r->valid) blankpackageperfile(r);
+
   return r;
 }
   
 int packagelist::checkdependers(pkginfo *pkg, int changemade) {
   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;
 }
@@ -274,7 +272,7 @@ int packagelist::resolvedepcon(dependency *depends) {
         foundany= 0;
         if (possi->ed->clientdata) foundany= 1;
         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->nextrev) {
           if (provider->up->type != dep_provides) continue;
@@ -340,8 +338,7 @@ int packagelist::resolvedepcon(dependency *depends) {
     if (depends->up != depends->list->ed) {
       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->nextrev) {
       if (provider->up->type != dep_provides) continue;
@@ -398,37 +395,34 @@ packagelist::deppossatisfied(deppossi *possi, perpackagestate **fixbyupgrade)
   if (possi->verrel != dvr_none)
     return false;
   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;
 }

+ 0 - 3
dselect/pkglist.cc

@@ -176,8 +176,6 @@ void packagelist::ensurestatsortinfo() {
         fprintf(debug,"packagelist[%p]::ensurestatsortinfos() i=%d pkg=%s\n",
                 this,index,table[index]->pkg->name);
       pkg= table[index]->pkg;
-      if (!pkg->installed.valid) blankpackageperfile(&pkg->installed);
-      if (!pkg->available.valid) blankpackageperfile(&pkg->available);
       switch (pkg->status) {
       case pkginfo::stat_unpacked:
       case pkginfo::stat_halfconfigured:
@@ -397,7 +395,6 @@ packagelist::packagelist(keybindings *kb) : baselist(kb) {
         pkg->want != pkginfo::want_install) {
       pkg->clientdata= 0; continue;
     }
-    if (!pkg->available.valid) blankpackageperfile(&pkg->available);
     // treat all unknown packages as already seen
     state->direct= state->original= (pkg->want == pkginfo::want_unknown ? pkginfo::want_purge : pkg->want);
     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
       // if we're looking at a provider relationship already
       deppossi *provider;
-      for (provider= possi->ed->available.valid ? possi->ed->available.depended : 0;
+      for (provider = possi->ed->available.depended;
            provider;
            provider=provider->nextrev) {
         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;
   blankversion(&pigp->configversion);
   pigp->files= NULL;
-  pigp->installed.valid = false;
-  pigp->available.valid = false;
   pigp->clientdata= NULL;
   pigp->trigaw.head = pigp->trigaw.tail = NULL;
   pigp->othertrigaw_head = NULL;
@@ -90,7 +88,6 @@ void blankpackageperfile(struct pkginfoperfile *pifp) {
   blankversion(&pifp->version);
   pifp->conffiles= NULL;
   pifp->arbs= NULL;
-  pifp->valid = true;
 }
 
 static int nes(const char *s) { return s && *s; }
@@ -109,8 +106,6 @@ informative(struct pkginfo *pkg, struct pkginfoperfile *info)
        informativeversion(&pkg->configversion)))
     /* We ignore Section and Priority, as these tend to hang around. */
     return true;
-  if (!info->valid)
-    return false;
   if (info->depends ||
       nes(info->description) ||
       nes(info->maintainer) ||

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

@@ -102,7 +102,6 @@ struct filedetails {
 };
 
 struct pkginfoperfile { /* pif */
-  bool valid;
   struct dependency *depends;
   struct deppossi *depended;
   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,
                  const struct pkginfo *pigp, const struct pkginfoperfile *pifp,
                  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 (flags&fw_printheader) {
     varbufaddstr(vb,fip->name);
@@ -139,7 +139,7 @@ void w_filecharf(struct varbuf *vb,
 void w_booleandefno(struct varbuf *vb,
                     const struct pkginfo *pigp, const struct pkginfoperfile *pifp,
                     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)) {
     varbufaddstr(vb, value ? "yes" : "no");
     return;
@@ -244,7 +244,6 @@ void w_dependency(struct varbuf *vb,
   const char *depdel;
   struct dependency *dyp;
 
-  if (!pifp->valid) return;
   if (flags&fw_printheader)
     sprintf(fnbuf,"%s: ",fip->name);
   else
@@ -266,7 +265,8 @@ void w_conffiles(struct varbuf *vb,
                  enum fwriteflags flags, const struct fieldinfo *fip) {
   struct conffile *i;
 
-  if (!pifp->valid || !pifp->conffiles || pifp == &pigp->available) return;
+  if (!pifp->conffiles || pifp == &pigp->available)
+    return;
   if (flags&fw_printheader)
     varbufaddstr(vb,"Conffiles:\n");
   for (i=pifp->conffiles; i; i= i->next) {
@@ -286,7 +286,7 @@ w_trigpend(struct varbuf *vb,
 {
   struct trigpend *tp;
 
-  if (!pifp->valid || pifp == &pigp->available || !pigp->trigpend_head)
+  if (pifp == &pigp->available || !pigp->trigpend_head)
     return;
 
   assert(pigp->status >= stat_triggersawaited &&
@@ -309,7 +309,7 @@ w_trigaw(struct varbuf *vb,
 {
   struct trigaw *ta;
 
-  if (!pifp->valid || pifp == &pigp->available || !pigp->trigaw.head)
+  if (pifp == &pigp->available || !pigp->trigaw.head)
     return;
 
   assert(pigp->status > stat_configfiles &&
@@ -333,11 +333,11 @@ void varbufrecord(struct varbuf *vb,
   for (fip= fieldinfos; fip->name; 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;
     /* Don't dump records which have no useful content. */
     if (!informative(pigp,pifp)) continue;
-    if (!pifp->valid) blankpackageperfile(pifp);
     varbufrecord(&vb,pigp,pifp);
     varbufaddc(&vb,'\n'); varbufaddc(&vb,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 */
     memset(fieldencountered, 0, sizeof(fieldencountered));
     blankpackage(&newpig);
-    blankpackageperfile(newpifp);
+
 /* Skip adjacent new lines */
     while(!EOF_mmap(dataptr, endptr)) {
       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)
       continue;
 
-    if (!pifp->valid) blankpackageperfile(pifp);
-
     /* Copy the priority and section across, but don't overwrite existing
      * values if the pdb_weakclassification flag is set.
      */
@@ -461,7 +459,6 @@ void copy_dependency_links(struct pkginfo *pkg,
     dyp->up= pkg;
     for (dop= dyp->list; dop; dop= dop->next) {
       addtopifp= available ? &dop->ed->available : &dop->ed->installed;
-      if (!addtopifp->valid) blankpackageperfile(addtopifp);
       dop->nextrev= addtopifp->depended;
       dop->backrev= NULL;
       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;
 
-	/* Make sure we have package info available, even if it's all empty. */
-	if (!pif->valid)
-		blankpackageperfile(pif);
-
 	while (head) {
 		int ok;
 		char fmt[16];
@@ -239,7 +235,7 @@ pkg_format_show(const struct pkg_format_node *head,
 					break;
 				}
 
-			if (!fip->name && pif->valid) {
+			if (!fip->name) {
 				const struct arbitraryfield *afp;
 
 				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;
          possi=possi->next) {
       trypkg= possi->ed;
-      if (!trypkg->available.valid) continue;
       if (trypkg->files && versionsatisfied(&trypkg->available,possi)) {
         if (trypkg->clientdata->istobe == itb_normal) { pkg= trypkg; break; }
       }
@@ -374,7 +373,8 @@ void predeppackage(const char *const *argv) {
            provider=provider->next) {
         if (provider->up->type != dep_provides) continue;
         trypkg= provider->up->up;
-        if (!trypkg->available.valid || !trypkg->files) continue;
+        if (!trypkg->files)
+          continue;
         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_triggerspending:
   case stat_installed:
-    assert(possdependee->installed.valid);
     if (checkversion && !versionsatisfied(&possdependee->installed,checkversion)) {
       varbufprintf(oemsgs, _("  Version of %s on system is %s.\n"),
 		   possdependee->name,
@@ -521,7 +520,6 @@ int dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
   ok= 2; /* 2=ok, 1=defer, 0=halt */
   debug(dbg_depcon,"checking dependencies of %s (- %s)",
         pkg->name, removing ? removing->name : "<none>");
-  assert(pkg->installed.valid);
 
   anycannotfixbytrig = 0;
   canfixbytrig = NULL;
@@ -542,17 +540,18 @@ int dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
                                &matched,possi,&interestingwarnings,&oemsgs);
       if (thisf > found) found= thisf;
       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);

+ 1 - 1
src/pkg-show.c

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

+ 6 - 10
src/processarc.c

@@ -261,9 +261,6 @@ void process_archive(const char *filename) {
     forcibleerr(fc_architecture,
                 _("package architecture (%s) does not match system (%s)"),
                 pkg->available.architecture,architecture);
-    
-  if (!pkg->installed.valid) blankpackageperfile(&pkg->installed);
-  assert(pkg->available.valid);
 
   for (deconpil= deconfigure;
        deconpil;
@@ -295,13 +292,12 @@ void process_archive(const char *filename) {
       break;
     case dep_provides:
       /* 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;
     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;
 	int plen, vlen, dlen;
 
-	pdesc = pkg->installed.valid ? pkg->installed.description : NULL;
+	pdesc = pkg->installed.description;
 	if (!pdesc) pdesc= _("(no description available)");
 
 	plen = strlen(array->pkgs[i]->name);
@@ -124,7 +124,7 @@ Desired=Unknown/Install/Remove/Purge/Hold\n\
     printf("\n");
     *head = true;
   }
-  if (!pkg->installed.valid) blankpackageperfile(&pkg->installed);
+
   limiteddescription(pkg,dw,&pdesc,&l);
   printf(format,
          "uihrp"[pkg->want],

+ 0 - 1
src/remove.c

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