Unbreak relocations broken by 621e7518418a0e031d302e8681fe0bf81d0c4b72
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 13 Jun 2008 10:52:32 +0000 (13:52 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 13 Jun 2008 14:00:21 +0000 (17:00 +0300)
- stick scareFlags into rpmfi_s for now so they're available everywhere
- subtle games with how fi->dil is alloced on scareMem behavior, don't
  blow up and don't leak memory either
- stuff scareFlags into rpmfi struct for now

lib/rpmfi.c
lib/rpmfi_internal.h

index 0589d46..e3e7026 100644 (file)
@@ -1061,18 +1061,26 @@ dColors[j] |= fColors[i];
            baseNames = freearray(baseNames, fileCount);
        }
        fi->bnl = hfd(fi->bnl, RPM_STRING_ARRAY_TYPE);
-       xx = hge(h, RPMTAG_BASENAMES, NULL, (rpm_data_t *) &fi->bnl, &fi->fc);
+       headerGet(h, RPMTAG_BASENAMES, &td, fi->scareFlags);
+       fi->fc = rpmtdCount(&td);
+       fi->bnl = td.data;
 
        xx = hme(h, RPMTAG_DIRNAMES, RPM_STRING_ARRAY_TYPE,
                          dirNames, dirCount);
        dirNames = freearray(dirNames, dirCount);
 
        fi->dnl = hfd(fi->dnl, RPM_STRING_ARRAY_TYPE);
-       xx = hge(h, RPMTAG_DIRNAMES, NULL, (rpm_data_t *) &fi->dnl, &fi->dc);
+       headerGet(h, RPMTAG_DIRNAMES, &td, fi->scareFlags);
+       fi->dc = rpmtdCount(&td);
+       fi->dnl = td.data;
 
        xx = hme(h, RPMTAG_DIRINDEXES, RPM_INT32_TYPE,
                          dirIndexes, fileCount);
-       xx = hge(h, RPMTAG_DIRINDEXES, NULL, (rpm_data_t *) &fi->dil, NULL);
+       headerGet(h, RPMTAG_DIRINDEXES, &td, fi->scareFlags);
+       /* Ugh, nasty games with how dil is alloced depending on scareMem */
+       if (fi->scareFlags & HEADERGET_ALLOC)
+           free(fi->dil);
+       fi->dil = td.data;
     }
 
     /* If we did relocations, baseNames and dirNames might be NULL by now */
@@ -1206,6 +1214,7 @@ rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem)
     fi->hme = (HME_t) headerModifyEntry;
     fi->hre = (HRE_t) headerRemoveEntry;
     fi->hfd = headerFreeData;
+    fi->scareFlags = scareFlags;
 
     fi->h = (scareMem ? headerLink(h) : NULL);
 
index 4cfc4f4..4fb4228 100644 (file)
@@ -84,6 +84,7 @@ struct rpmfi_s {
     HME_t hme;                 /*!< Vector to headerModifyEntry() */
     HRE_t hre;                 /*!< Vector to headerRemoveEntry() */
     HFD_t hfd;                 /*!< Vector to headerFreeData() */
+    headerGetFlags scareFlags; /*!< headerGet flags wrt scareMem */
 /*-----------------------------*/
     uid_t uid;                 /*!< File uid (default). */
     gid_t gid;                 /*!< File gid (default). */