13 #define _RPMDS_INTERNAL
128 availableIndex ai = &al->
index;
162 availableIndex ai = &al->
index;
179 availablePackage alp;
186 if ((alp = al->
list) != NULL)
187 for (i = 0; i < al->
size; i++, alp++) {
193 if ((die = al->
dirs) != NULL)
194 for (i = 0; i < al->
numDirs; i++, die++) {
218 const dirInfo a = (
const dirInfo) one;
219 const dirInfo b = (
const dirInfo) two;
260 availablePackage alp;
263 if (al == NULL || al->
list == NULL)
266 alp = al->
list + pkgNum;
269 if ((fi = alp->
fi) != NULL)
274 memset(
alloca(
sizeof(*dieNeedle)), 0,
sizeof(*dieNeedle));
281 if (al->
dirs != NULL)
282 for (dx =
rpmfiDC(fi) - 1; dx >= 0; dx--)
292 ? strlen(dieNeedle->
dirName) : 0);
299 fie = die->
files + last - 1;
300 for (i = last - 1; i >= 0; i--, fie--) {
301 if (fie->
pkgNum != pkgNum)
305 if (i < die->numFiles)
306 memmove(fie, fie+1, (die->
numFiles - i) *
sizeof(*fie));
320 memmove(die, die+1, (al->
numDirs - (die - al->
dirs)) *
sizeof(*die));
325 if (origNumDirs > al->
numDirs) {
337 memset(alp, 0,
sizeof(*alp));
346 availablePackage alp;
354 if (pkgNum >= 0 && pkgNum < al->size) {
364 if (al->
list == NULL)
367 alp = al->
list + pkgNum;
383 memset(
alloca(
sizeof(*dieNeedle)), 0,
sizeof(*dieNeedle));
387 int * dirMapping =
alloca(
sizeof(*dirMapping) * dc);
388 int * dirUnique =
alloca(
sizeof(*dirUnique) * dc);
402 for (dx = 0; dx <
dc; dx++) {
407 for (i = 0; i < dx; i++) {
411 if (iDN != NULL && !strcmp(DN, iDN))
418 for (dx = 0; dx <
dc; dx++) {
421 if (dirUnique[dx] < dx) {
422 dirMapping[dx] = dirMapping[dirUnique[dx]];
434 ? strlen(dieNeedle->
dirName) : 0);
435 die = bsearch(dieNeedle, al->
dirs, origNumDirs,
438 dirMapping[dx] = die - al->
dirs;
442 if (dieNeedle->
dirName != NULL)
452 for (first =
rpmfiNext(fi); first >= 0;) {
462 if (next < 0) next =
rpmfiFC(fi);
464 die = al->
dirs + dirMapping[dx];
472 while ((first =
rpmfiNext(fi)) >= 0 && first < next) {
488 if (origNumDirs != al->
numDirs)
495 assert(((
alNum)(alp - al->
list)) == pkgNum);
505 static int indexcmp(
const void * one,
const void * two)
526 availableIndex ai = &al->
index;
527 availableIndexEntry aie;
530 if (provides == NULL || pkgNum < 0 || pkgNum >= al->
size)
532 if (ai->
index == NULL || ai->
k < 0 || ai->
k >= ai->
size)
538 if ((Name = provides->N[provides->i]) == NULL)
543 if (tscolor && dscolor && !(tscolor & dscolor))
553 aie->
entryLen = (
unsigned short)strlen(Name);
557 assert(ix < 0x10000);
560 aie->
type = IET_PROVIDES;
567 availablePackage alp;
570 if (al == NULL || al->
list == NULL)
return;
574 for (i = 0; i < al->
size; i++) {
579 if (ai->
size == 0)
return;
583 for (i = 0; i < al->
size; i++) {
600 const char * baseName;
602 memset(
alloca(
sizeof(*dieNeedle)), 0,
sizeof(*dieNeedle));
604 fileIndexEntry fieNeedle =
605 memset(
alloca(
sizeof(*fieNeedle)), 0,
sizeof(*fieNeedle));
607 availablePackage alp;
609 const char * fileName;
613 if (al == NULL || (fileName =
rpmdsN(ds)) == NULL || *fileName !=
'/')
621 dirName = t =
xstrdup(fileName);
622 if ((t = strrchr(t,
'/')) != NULL) {
628 dieNeedle->
dirName = (
char *) dirName;
639 if ((baseName = strrchr(fileName,
'/')) == NULL)
643 for (found = 0, ret = NULL;
662 if (tscolor && ficolor && !(tscolor & ficolor))
667 ret =
xrealloc(ret, (found+2) *
sizeof(*ret));
669 ret[found] = alp->
key;
676 dirName =
_free(dirName);
686 availableIndexEntry needle;
687 availableIndexEntry match;
691 availablePackage alp;
696 if (al == NULL || ds == NULL || (KName =
rpmdsN(ds)) == NULL)
702 if (ret != NULL && *ret != NULL)
712 needle = memset(
alloca(
sizeof(*needle)), 0,
sizeof(*needle));
714 needle->
entry = KName;
726 if (al->
list != NULL)
727 for (ret = NULL, found = 0;
735 switch (match->
type) {
749 ret =
xrealloc(ret, (found + 2) *
sizeof(*ret));
751 ret[found] = alp->
key;