From 5fa08529cb805bb36a8b9a1d7300cade13d05e4b Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Tue, 27 Nov 2007 11:52:55 +0200 Subject: [PATCH] Move rpmfiBuildFNames() to rpmfi now that it's possible --- lib/formats.c | 1 - lib/legacy.c | 56 +----------------------------------------------------- lib/legacy.h | 20 ------------------- lib/psm.c | 1 - lib/rpmfi.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/rpmfi.h | 20 +++++++++++++++++++ python/header-py.c | 2 +- 7 files changed, 78 insertions(+), 78 deletions(-) diff --git a/lib/formats.c b/lib/formats.c index fdb6a5f..f9f8627 100644 --- a/lib/formats.c +++ b/lib/formats.c @@ -9,7 +9,6 @@ #include -#include "lib/legacy.h" /* XXX rpmfiBuildFNames() */ #include "lib/manifest.h" #include "debug.h" diff --git a/lib/legacy.c b/lib/legacy.c index 6a8e253..267b136 100644 --- a/lib/legacy.c +++ b/lib/legacy.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "lib/legacy.h" #include "debug.h" @@ -115,61 +116,6 @@ exit: xx = hre(h, RPMTAG_OLDFILENAMES); } -void rpmfiBuildFNames(Header h, rpmTag tagN, - const char *** fnp, int * fcp) -{ - HGE_t hge = (HGE_t)headerGetEntryMinMemory; - HFD_t hfd = headerFreeData; - const char ** baseNames; - const char ** dirNames; - uint32_t * dirIndexes; - int count; - const char ** fileNames; - int size; - rpmTag dirNameTag = 0; - rpmTag dirIndexesTag = 0; - rpmTagType bnt, dnt; - char * t; - int i, xx; - - if (tagN == RPMTAG_BASENAMES) { - dirNameTag = RPMTAG_DIRNAMES; - dirIndexesTag = RPMTAG_DIRINDEXES; - } else if (tagN == RPMTAG_ORIGBASENAMES) { - dirNameTag = RPMTAG_ORIGDIRNAMES; - dirIndexesTag = RPMTAG_ORIGDIRINDEXES; - } - - if (!hge(h, tagN, &bnt, (void **) &baseNames, &count)) { - if (fnp) *fnp = NULL; - if (fcp) *fcp = 0; - return; /* no file list */ - } - - xx = hge(h, dirNameTag, &dnt, (void **) &dirNames, NULL); - xx = hge(h, dirIndexesTag, NULL, (void **) &dirIndexes, &count); - - size = sizeof(*fileNames) * count; - for (i = 0; i < count; i++) - size += strlen(baseNames[i]) + strlen(dirNames[dirIndexes[i]]) + 1; - - fileNames = xmalloc(size); - t = ((char *) fileNames) + (sizeof(*fileNames) * count); - for (i = 0; i < count; i++) { - fileNames[i] = t; - t = stpcpy( stpcpy(t, dirNames[dirIndexes[i]]), baseNames[i]); - *t++ = '\0'; - } - baseNames = hfd(baseNames, bnt); - dirNames = hfd(dirNames, dnt); - - if (fnp) - *fnp = fileNames; - else - fileNames = _free(fileNames); - if (fcp) *fcp = count; -} - void expandFilelist(Header h) { HAE_t hae = (HAE_t)headerAddEntry; diff --git a/lib/legacy.h b/lib/legacy.h index fcec32b..95a9640 100644 --- a/lib/legacy.h +++ b/lib/legacy.h @@ -21,26 +21,6 @@ extern "C" { void compressFilelist(Header h); /** - * Retrieve file names from header. - * - * The representation of file names in package headers changed in rpm-4.0. - * Originally, file names were stored as an array of absolute paths. - * In rpm-4.0, file names are stored as separate arrays of dirname's and - * basename's, * with a dirname index to associate the correct dirname - * with each basname. - * - * This function is used to retrieve file names independent of how the - * file names are represented in the package header. - * - * @param h header - * @param tagN RPMTAG_BASENAMES | PMTAG_ORIGBASENAMES - * @retval *fnp array of file names - * @retval *fcp number of files - */ -void rpmfiBuildFNames(Header h, rpmTag tagN, - const char *** fnp, int * fcp); - -/** * Convert (dirname,basename,dirindex) tags to absolute path tag. * @param h header */ diff --git a/lib/psm.c b/lib/psm.c index 22989e9..f32b3c2 100644 --- a/lib/psm.c +++ b/lib/psm.c @@ -27,7 +27,6 @@ #include "lib/rpmlead.h" /* writeLead proto */ #include "lib/signature.h" /* signature constants */ -#include "lib/legacy.h" /* XXX rpmfiBuildFNames() */ #include /* rpmMkTempFile() */ #include "lib/misc.h" /* XXX rpmMkdirPath, doputenv */ #include /* XXX for db_chrootDone */ diff --git a/lib/rpmfi.c b/lib/rpmfi.c index 0a21030..faca414 100644 --- a/lib/rpmfi.c +++ b/lib/rpmfi.c @@ -1539,3 +1539,59 @@ exit: av = _free(av); if (fcp) *fcp = ac; } + +void rpmfiBuildFNames(Header h, rpmTag tagN, + const char *** fnp, int * fcp) +{ + HGE_t hge = (HGE_t)headerGetEntryMinMemory; + HFD_t hfd = headerFreeData; + const char ** baseNames; + const char ** dirNames; + uint32_t * dirIndexes; + int count; + const char ** fileNames; + int size; + rpmTag dirNameTag = 0; + rpmTag dirIndexesTag = 0; + rpmTagType bnt, dnt; + char * t; + int i, xx; + + if (tagN == RPMTAG_BASENAMES) { + dirNameTag = RPMTAG_DIRNAMES; + dirIndexesTag = RPMTAG_DIRINDEXES; + } else if (tagN == RPMTAG_ORIGBASENAMES) { + dirNameTag = RPMTAG_ORIGDIRNAMES; + dirIndexesTag = RPMTAG_ORIGDIRINDEXES; + } + + if (!hge(h, tagN, &bnt, (void **) &baseNames, &count)) { + if (fnp) *fnp = NULL; + if (fcp) *fcp = 0; + return; /* no file list */ + } + + xx = hge(h, dirNameTag, &dnt, (void **) &dirNames, NULL); + xx = hge(h, dirIndexesTag, NULL, (void **) &dirIndexes, &count); + + size = sizeof(*fileNames) * count; + for (i = 0; i < count; i++) + size += strlen(baseNames[i]) + strlen(dirNames[dirIndexes[i]]) + 1; + + fileNames = xmalloc(size); + t = ((char *) fileNames) + (sizeof(*fileNames) * count); + for (i = 0; i < count; i++) { + fileNames[i] = t; + t = stpcpy( stpcpy(t, dirNames[dirIndexes[i]]), baseNames[i]); + *t++ = '\0'; + } + baseNames = hfd(baseNames, bnt); + dirNames = hfd(dirNames, dnt); + + if (fnp) + *fnp = fileNames; + else + fileNames = _free(fileNames); + if (fcp) *fcp = count; +} + diff --git a/lib/rpmfi.h b/lib/rpmfi.h index 17bf803..ec46094 100644 --- a/lib/rpmfi.h +++ b/lib/rpmfi.h @@ -447,6 +447,26 @@ void rpmfiBuildFDeps(Header h, rpmTag tagN, const char *** fdepsp, int * fcp); /** \ingroup rpmfi + * Retrieve file names from header. + * + * The representation of file names in package headers changed in rpm-4.0. + * Originally, file names were stored as an array of absolute paths. + * In rpm-4.0, file names are stored as separate arrays of dirname's and + * basename's, * with a dirname index to associate the correct dirname + * with each basname. + * + * This function is used to retrieve file names independent of how the + * file names are represented in the package header. + * + * @param h header + * @param tagN RPMTAG_BASENAMES | PMTAG_ORIGBASENAMES + * @retval *fnp array of file names + * @retval *fcp number of files + */ +void rpmfiBuildFNames(Header h, rpmTag tagN, + const char *** fnp, int * fcp); + +/** \ingroup rpmfi * Return file type from mode_t. * @param mode file mode bits (from header) * @return file type diff --git a/python/header-py.c b/python/header-py.c index 165743e..cfd5e17 100644 --- a/python/header-py.c +++ b/python/header-py.c @@ -7,7 +7,7 @@ #include #include -#include "lib/legacy.h" +#include "lib/legacy.h" /* XXX expand/compressFilelist(), providePackageNVR() */ #include /* XXX rpmtsCreate/rpmtsFree */ -- 2.7.4