Eliminate rpmfiBuildFClasses() and rpmfiBuildFDepts() from the API+ABI
- both are only needed by tag extensions, move them there - headerGet() with extensions enabled provides a nicer API for accessing the data anyway
This commit is contained in:
parent
7d38c6e2d8
commit
82b89c3b0c
146
lib/rpmfi.c
146
lib/rpmfi.c
|
@ -1340,152 +1340,6 @@ fprintf(stderr, "*** fi %p\t%s[%d]\n", fi, Type, (fi ? fi->fc : 0));
|
|||
return rpmfiLink(fi, (fi ? fi->Type : NULL));
|
||||
}
|
||||
|
||||
void rpmfiBuildFClasses(Header h, const char *** fclassp, rpm_count_t * fcp)
|
||||
{
|
||||
int scareMem = 0;
|
||||
rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, scareMem);
|
||||
const char * FClass;
|
||||
const char ** av;
|
||||
int ac;
|
||||
size_t nb;
|
||||
char * t;
|
||||
|
||||
if ((ac = rpmfiFC(fi)) <= 0) {
|
||||
av = NULL;
|
||||
ac = 0;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Compute size of file class argv array blob. */
|
||||
nb = (ac + 1) * sizeof(*av);
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
FClass = rpmfiFClass(fi);
|
||||
if (FClass && *FClass != '\0')
|
||||
nb += strlen(FClass);
|
||||
nb += 1;
|
||||
}
|
||||
|
||||
/* Create and load file class argv array. */
|
||||
av = xmalloc(nb);
|
||||
t = ((char *) av) + ((ac + 1) * sizeof(*av));
|
||||
ac = 0;
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
FClass = rpmfiFClass(fi);
|
||||
av[ac++] = t;
|
||||
if (FClass && *FClass != '\0')
|
||||
t = stpcpy(t, FClass);
|
||||
*t++ = '\0';
|
||||
}
|
||||
av[ac] = NULL; /* XXX tag arrays are not NULL terminated. */
|
||||
|
||||
exit:
|
||||
fi = rpmfiFree(fi);
|
||||
if (fclassp)
|
||||
*fclassp = av;
|
||||
else
|
||||
av = _free(av);
|
||||
if (fcp) *fcp = ac;
|
||||
}
|
||||
|
||||
void rpmfiBuildFDeps(Header h, rpmTag tagN,
|
||||
const char *** fdepsp, rpm_count_t * fcp)
|
||||
{
|
||||
int scareMem = 0;
|
||||
rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, scareMem);
|
||||
rpmds ds = NULL;
|
||||
const char ** av;
|
||||
int ac;
|
||||
size_t nb;
|
||||
char * t;
|
||||
char deptype = 'R';
|
||||
char mydt;
|
||||
const char * DNEVR;
|
||||
const uint32_t * ddict;
|
||||
unsigned ix;
|
||||
int ndx;
|
||||
|
||||
if ((ac = rpmfiFC(fi)) <= 0) {
|
||||
av = NULL;
|
||||
ac = 0;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (tagN == RPMTAG_PROVIDENAME)
|
||||
deptype = 'P';
|
||||
else if (tagN == RPMTAG_REQUIRENAME)
|
||||
deptype = 'R';
|
||||
|
||||
ds = rpmdsNew(h, tagN, scareMem);
|
||||
|
||||
/* Compute size of file depends argv array blob. */
|
||||
nb = (ac + 1) * sizeof(*av);
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
ddict = NULL;
|
||||
ndx = rpmfiFDepends(fi, &ddict);
|
||||
if (ddict != NULL)
|
||||
while (ndx-- > 0) {
|
||||
ix = *ddict++;
|
||||
mydt = ((ix >> 24) & 0xff);
|
||||
if (mydt != deptype)
|
||||
continue;
|
||||
ix &= 0x00ffffff;
|
||||
(void) rpmdsSetIx(ds, ix-1);
|
||||
if (rpmdsNext(ds) < 0)
|
||||
continue;
|
||||
DNEVR = rpmdsDNEVR(ds);
|
||||
if (DNEVR != NULL)
|
||||
nb += strlen(DNEVR+2) + 1;
|
||||
}
|
||||
nb += 1;
|
||||
}
|
||||
|
||||
/* Create and load file depends argv array. */
|
||||
av = xmalloc(nb);
|
||||
t = ((char *) av) + ((ac + 1) * sizeof(*av));
|
||||
ac = 0;
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
av[ac++] = t;
|
||||
ddict = NULL;
|
||||
ndx = rpmfiFDepends(fi, &ddict);
|
||||
if (ddict != NULL)
|
||||
while (ndx-- > 0) {
|
||||
ix = *ddict++;
|
||||
mydt = ((ix >> 24) & 0xff);
|
||||
if (mydt != deptype)
|
||||
continue;
|
||||
ix &= 0x00ffffff;
|
||||
(void) rpmdsSetIx(ds, ix-1);
|
||||
if (rpmdsNext(ds) < 0)
|
||||
continue;
|
||||
DNEVR = rpmdsDNEVR(ds);
|
||||
if (DNEVR != NULL) {
|
||||
t = stpcpy(t, DNEVR+2);
|
||||
*t++ = ' ';
|
||||
*t = '\0';
|
||||
}
|
||||
}
|
||||
*t++ = '\0';
|
||||
}
|
||||
av[ac] = NULL; /* XXX tag arrays are not NULL terminated. */
|
||||
|
||||
exit:
|
||||
fi = rpmfiFree(fi);
|
||||
ds = rpmdsFree(ds);
|
||||
if (fdepsp)
|
||||
*fdepsp = av;
|
||||
else
|
||||
av = _free(av);
|
||||
if (fcp) *fcp = ac;
|
||||
}
|
||||
|
||||
void rpmfiBuildFNames(Header h, rpmTag tagN,
|
||||
const char *** fnp, rpm_count_t * fcp)
|
||||
{
|
||||
|
|
26
lib/rpmfi.h
26
lib/rpmfi.h
|
@ -353,32 +353,6 @@ rpmfi rpmfiFree(rpmfi fi);
|
|||
*/
|
||||
rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem);
|
||||
|
||||
/** \ingroup rpmfi
|
||||
* Retrieve file classes from header.
|
||||
*
|
||||
* This function is used to retrieve file classes from the header.
|
||||
*
|
||||
* @param h header
|
||||
* @retval *fclassp array of file classes
|
||||
* @retval *fcp number of files
|
||||
*/
|
||||
void rpmfiBuildFClasses(Header h,
|
||||
const char *** fclassp, rpm_count_t * fcp);
|
||||
|
||||
|
||||
/** \ingroup rpmfi
|
||||
* Retrieve per-file dependencies from header.
|
||||
*
|
||||
* This function is used to retrieve per-file dependencies from the header.
|
||||
*
|
||||
* @param h header
|
||||
* @param tagN RPMTAG_PROVIDENAME | RPMTAG_REQUIRENAME
|
||||
* @retval *fdepsp array of file dependencies
|
||||
* @retval *fcp number of files
|
||||
*/
|
||||
void rpmfiBuildFDeps(Header h, rpmTag tagN,
|
||||
const char *** fdepsp, rpm_count_t * fcp);
|
||||
|
||||
/** \ingroup rpmfi
|
||||
* Retrieve file names from header.
|
||||
*
|
||||
|
|
146
lib/tagexts.c
146
lib/tagexts.c
|
@ -22,6 +22,152 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[];
|
|||
|
||||
void *rpmHeaderTagFunc(rpmTag tag);
|
||||
|
||||
static void rpmfiBuildFClasses(Header h, const char *** fclassp, rpm_count_t * fcp)
|
||||
{
|
||||
int scareMem = 0;
|
||||
rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, scareMem);
|
||||
const char * FClass;
|
||||
const char ** av;
|
||||
int ac;
|
||||
size_t nb;
|
||||
char * t;
|
||||
|
||||
if ((ac = rpmfiFC(fi)) <= 0) {
|
||||
av = NULL;
|
||||
ac = 0;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Compute size of file class argv array blob. */
|
||||
nb = (ac + 1) * sizeof(*av);
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
FClass = rpmfiFClass(fi);
|
||||
if (FClass && *FClass != '\0')
|
||||
nb += strlen(FClass);
|
||||
nb += 1;
|
||||
}
|
||||
|
||||
/* Create and load file class argv array. */
|
||||
av = xmalloc(nb);
|
||||
t = ((char *) av) + ((ac + 1) * sizeof(*av));
|
||||
ac = 0;
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
FClass = rpmfiFClass(fi);
|
||||
av[ac++] = t;
|
||||
if (FClass && *FClass != '\0')
|
||||
t = stpcpy(t, FClass);
|
||||
*t++ = '\0';
|
||||
}
|
||||
av[ac] = NULL; /* XXX tag arrays are not NULL terminated. */
|
||||
|
||||
exit:
|
||||
fi = rpmfiFree(fi);
|
||||
if (fclassp)
|
||||
*fclassp = av;
|
||||
else
|
||||
av = _free(av);
|
||||
if (fcp) *fcp = ac;
|
||||
}
|
||||
|
||||
static void rpmfiBuildFDeps(Header h, rpmTag tagN,
|
||||
const char *** fdepsp, rpm_count_t * fcp)
|
||||
{
|
||||
int scareMem = 0;
|
||||
rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, scareMem);
|
||||
rpmds ds = NULL;
|
||||
const char ** av;
|
||||
int ac;
|
||||
size_t nb;
|
||||
char * t;
|
||||
char deptype = 'R';
|
||||
char mydt;
|
||||
const char * DNEVR;
|
||||
const uint32_t * ddict;
|
||||
unsigned ix;
|
||||
int ndx;
|
||||
|
||||
if ((ac = rpmfiFC(fi)) <= 0) {
|
||||
av = NULL;
|
||||
ac = 0;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (tagN == RPMTAG_PROVIDENAME)
|
||||
deptype = 'P';
|
||||
else if (tagN == RPMTAG_REQUIRENAME)
|
||||
deptype = 'R';
|
||||
|
||||
ds = rpmdsNew(h, tagN, scareMem);
|
||||
|
||||
/* Compute size of file depends argv array blob. */
|
||||
nb = (ac + 1) * sizeof(*av);
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
ddict = NULL;
|
||||
ndx = rpmfiFDepends(fi, &ddict);
|
||||
if (ddict != NULL)
|
||||
while (ndx-- > 0) {
|
||||
ix = *ddict++;
|
||||
mydt = ((ix >> 24) & 0xff);
|
||||
if (mydt != deptype)
|
||||
continue;
|
||||
ix &= 0x00ffffff;
|
||||
(void) rpmdsSetIx(ds, ix-1);
|
||||
if (rpmdsNext(ds) < 0)
|
||||
continue;
|
||||
DNEVR = rpmdsDNEVR(ds);
|
||||
if (DNEVR != NULL)
|
||||
nb += strlen(DNEVR+2) + 1;
|
||||
}
|
||||
nb += 1;
|
||||
}
|
||||
|
||||
/* Create and load file depends argv array. */
|
||||
av = xmalloc(nb);
|
||||
t = ((char *) av) + ((ac + 1) * sizeof(*av));
|
||||
ac = 0;
|
||||
fi = rpmfiInit(fi, 0);
|
||||
if (fi != NULL)
|
||||
while (rpmfiNext(fi) >= 0) {
|
||||
av[ac++] = t;
|
||||
ddict = NULL;
|
||||
ndx = rpmfiFDepends(fi, &ddict);
|
||||
if (ddict != NULL)
|
||||
while (ndx-- > 0) {
|
||||
ix = *ddict++;
|
||||
mydt = ((ix >> 24) & 0xff);
|
||||
if (mydt != deptype)
|
||||
continue;
|
||||
ix &= 0x00ffffff;
|
||||
(void) rpmdsSetIx(ds, ix-1);
|
||||
if (rpmdsNext(ds) < 0)
|
||||
continue;
|
||||
DNEVR = rpmdsDNEVR(ds);
|
||||
if (DNEVR != NULL) {
|
||||
t = stpcpy(t, DNEVR+2);
|
||||
*t++ = ' ';
|
||||
*t = '\0';
|
||||
}
|
||||
}
|
||||
*t++ = '\0';
|
||||
}
|
||||
av[ac] = NULL; /* XXX tag arrays are not NULL terminated. */
|
||||
|
||||
exit:
|
||||
fi = rpmfiFree(fi);
|
||||
ds = rpmdsFree(ds);
|
||||
if (fdepsp)
|
||||
*fdepsp = av;
|
||||
else
|
||||
av = _free(av);
|
||||
if (fcp) *fcp = ac;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve mounted file system paths.
|
||||
* @param h header
|
||||
|
|
Loading…
Reference in New Issue