30 #define SOLVABLE_BLOCK 255
32 #define KNOWNID_INITIALIZE
34 #undef KNOWNID_INITIALIZE
57 s->
name = SYSTEM_SYSTEM;
58 s->
arch = ARCH_NOARCH;
69 # ifdef MULTI_SEMANTICS
70 pool->disttype = DISTTYPE_DEB;
105 #ifdef MULTI_SEMANTICS
107 pool_setdisttype(
Pool *pool,
int disttype)
109 pool->disttype = disttype;
138 if (reuseids && start + count == pool->
nsolvables)
166 return *(
Id *)ap - *(
Id *)bp;
174 if ((r = (*da++ - *db++)) != 0)
178 return *(
Id *)ap - *(
Id *)bp;
192 Id lastid, *last, *dp, *lp;
208 if (o == 0 || o == 1)
236 if (o == 0 || o == 1)
250 while ((*dp++ = *lp++) != 0)
275 int i, num, np, extra;
281 Id *whatprovidesdata, *d;
307 while ((
id = *pp++) != 0)
320 for (i = 0, idp = whatprovides; i < num; i++, idp++)
333 extra = 2 * pool->
nrels;
354 while ((
id = *pp++) != 0)
361 d = whatprovidesdata + whatprovides[id];
408 int count = q->
count;
436 #if defined(MULTI_SEMANTICS)
437 # define EVRCMP_DEPCMP (pool->disttype == DISTTYPE_DEB ? EVRCMP_COMPARE : EVRCMP_MATCH_RELEASE)
438 #elif defined(DEBIAN_SEMANTICS)
439 # define EVRCMP_DEPCMP EVRCMP_COMPARE
441 # define EVRCMP_DEPCMP EVRCMP_MATCH_RELEASE
452 int flags = rd->
flags;
478 return flags & 2 ? 1 : 0;
483 if (flags != 2 && flags != 5)
494 if (!pflags || !flags || pflags >= 8 || flags >= 8)
496 if (flags == 7 || pflags == 7)
498 if ((pflags & flags & 5) != 0)
502 if ((pflags & flags & 2) != 0)
507 int f = flags == 5 ? 5 : flags == 2 ? pflags : (flags ^ 5) & (pflags | 5);
560 int flags = rd->
flags;
580 while ((p = *pp++) != 0)
582 for (pp3 = pp2; *pp3; pp3++)
599 while ((p = *pp++) != 0)
603 while ((p = *pp++) != 0)
605 if (plist.
count != cnt)
610 if (name == NAMESPACE_OTHERPROVIDERS)
637 for (p = 1, s = pool->
solvables + p; p < pool->nsolvables; p++, s++)
639 if (s->
arch != ARCH_SRC && s->
arch != ARCH_NOSRC)
648 while ((p = *pp++) != 0)
659 while ((p = *pp++) != 0)
666 while ((pid = *pidp++) != 0)
696 while ((p = *pp++) != 0)
708 while ((pid = *pidp++) != 0)
712 #if defined(MULTI_SEMANTICS)
713 if (pool->disttype == DISTTYPE_DEB)
717 #elif defined(DEBIAN_SEMANTICS)
727 if (prd->
name != name)
738 if (plist.
count == 0 && !strncmp(
id2str(pool, name),
"rpmlib(", 7))
764 va_start(args, format);
768 vprintf(format, args);
770 vfprintf(stderr, format, args);
773 vsnprintf(buf,
sizeof(buf), format, args);
805 #define SEARCHFILES_BLOCK 127
814 while ((dep = *ida++) != 0)
832 if (rd->
name == NAMESPACE_INSTALLED || rd->
name == NAMESPACE_SPLITPROVIDES)
870 sr = strrchr(s,
'/');
902 for (i = 0; i < cbd->
nfiles; i++)
918 for (i = 0; i < cbd->
nfiles; i++)
920 if (cbd->
dids[i] != value->
id)
922 if (!strcmp(cbd->
names[i], value->
str))
938 int i, j, repoid, repodataid;
939 int provstart, provend;
941 int ndone, incomplete;
954 repo = repoonly ? repoonly : pool->
repos[0];
957 provstart = provend = 0;
962 if (repoonly || ++repoid == pool->
nrepos)
964 repo = pool->
repos[repoid];
968 for (data = repo->
repodata, repodataid = 0; repodataid < repo->nrepodata; repodataid++, data++)
976 for (i = 0; i < fileprovidesq.
count; i++)
978 provstart = data->
start;
980 for (i = 0; i < cbd->
nfiles; i++)
986 for (p = data->
start; p < data->end; p++)
1001 if (data->
start < provstart || data->
end > provend)
1004 provstart = provend = 0;
1011 for (j = 1; j < data->
nkeys; j++)
1012 if (data->
keys[j].
name != REPOSITORY_SOLVABLES && data->
keys[j].
name != SOLVABLE_FILELIST)
1014 if (j < data->nkeys)
1017 for (i = 0; i < cbd->
nfiles; i++)
1019 printf(
"need complete filelist because of %s\n",
id2str(pool, cbd->
ids[i]));
1021 for (i = 0; i < cbd->
nfiles; i++)
1031 for (p = data->
start; p < data->end; p++)
1046 if (repoonly || ++repoid == pool->
nrepos)
1048 repo = pool->
repos[repoid];
1066 memset(&sf, 0,
sizeof(sf));
1068 memset(&isf, 0,
sizeof(isf));
1071 isfp = installed ? &isf : 0;
1072 for (i = 1, s = pool->
solvables + i; i < pool->nsolvables; i++, s++)
1101 for (i = 0; i < sf.
nfiles; i++)
1113 for (i = 0; i < sf.
nfiles; i++)
1124 for (i = 0; i < isf.
nfiles; i++)
1130 for (i = 0; i < isf.
nfiles; i++)
1150 pool_search(
Pool *pool,
Id p,
Id key,
const char *match,
int flags,
int (*callback)(
void *cbdata,
Solvable *s,
struct _Repodata *data,
struct _Repokey *key,
struct _KeyValue *kv),
void *cbdata)
1167 memset(&pool->
pos, 0,
sizeof(pool->
pos));
1189 pool->
languages[i] = strdup(languages[i]);
1202 l = strlen(n) + strlen(lang) + 2;
1203 if (l >
sizeof(buf))
1204 p =
sat_malloc(strlen(n) + strlen(lang) + 2);
1207 sprintf(p,
"%s:%s", n, lang);
1208 id =
str2id(pool, p, create);
1271 l1 = str1 ? strlen(str1) : 0;
1272 l2 = str2 ? strlen(str2) : 0;
1273 l3 = str3 ? strlen(str3) : 0;
1300 l1 = str1 ? strlen(str1) : 0;
1301 l2 = str2 ? strlen(str2) : 0;
1302 l3 = str3 ? strlen(str3) : 0;
1372 const char *compstr;
1381 for (dn = 2, dirs = data->
dirpool.
dirs + dn; dn < data->dirpool.ndirs; dn++)
1395 if (!mptree[mp].
child)
1404 compl = strlen(compstr);
1405 for (i = mptree[mp].child; i; i = mptree[i].
sibling)
1406 if (mptree[i].compl == compl && !strncmp(mptree[i].comp, compstr, compl))
1408 dirmap[dn] = i ? i : -mp;
1414 dirmap[dn] = mptree[mp > 0 ? mp : -mp].
mountpoint;
1421 if (value->
id < 0 || value->
id >= cbd->
nmap)
1443 if (mptree[pos].mountpoint == -1)
1451 #define MPTREE_BLOCK 15
1457 const char *path, *compstr;
1468 memset(&ignoredu, 0,
sizeof(ignoredu));
1479 mptree[0].
child = 0;
1481 mptree[0].
compl = 0;
1486 for (mp = 0; mp < nmps; mp++)
1491 path = mps[mp].
path;
1496 if ((p = strchr(path,
'/')) == 0)
1499 compl = strlen(compstr);
1510 for (i = mptree[pos].child; i; i = mptree[i].
sibling)
1511 if (mptree[i].compl == compl && !strncmp(mptree[i].comp, compstr, compl))
1519 mptree[i].
child = 0;
1520 mptree[i].
comp = compstr;
1521 mptree[i].
compl = compl;
1523 mptree[pos].
child = i;
1533 for (i = 0; i < nmptree; i++)
1535 printf(
"#%d sibling: %d\n", i, mptree[i].sibling);
1536 printf(
"#%d child: %d\n", i, mptree[i].child);
1537 printf(
"#%d comp: %s\n", i, mptree[i].comp);
1538 printf(
"#%d compl: %d\n", i, mptree[i].compl);
1539 printf(
"#%d mountpont: %d\n", i, mptree[i].mountpoint);
1545 for (sp = 1, s = pool->
solvables + sp; sp < pool->nsolvables; sp++, s++)
1547 if (!s->repo || (oldinstalled && s->repo == oldinstalled))
1549 if (!
MAPTST(installedmap, sp))
1553 if (!cbd.
hasdu && oldinstalled)
1561 Id obs, *obsp = s->repo->idarraydata + s->obsoletes;
1562 while ((obs = *obsp++) != 0)
1564 if (op >= oldinstalled->
start && op < oldinstalled->end)
1569 if (op >= oldinstalled->
start && op < oldinstalled->end)
1579 if (
MAPTST(installedmap, sp))
1600 for (sp = 1, s = pool->
solvables + sp; sp < pool->nsolvables; sp++, s++)
1602 if (!s->
repo || (oldinstalled && s->
repo == oldinstalled))
1604 if (!
MAPTST(installedmap, sp))
1612 if (
MAPTST(installedmap, sp))
1647 if ((map[p] & 9) != 9)
1666 if (ispatch && noobsoletesmap && noobsoletesmap->
size &&
MAPTST(noobsoletesmap, p) &&
ISRELDEP(dep))
1669 if ((map[p] & 9) == 9)
1691 Id p, *dp, con, *conp, req, *reqp;
1698 if (!
MAPTST(installedmap, p))
1705 while ((con = *conp++) != 0)
1712 for (i = 0; i < pkgs->
count; i++)
1715 for (i = 0, did = 0; did < pkgs->
count; i++, did++)
1717 if (i == pkgs->
count)
1720 if ((map[p] & 16) == 0)
1722 if ((map[p] & 2) != 0)
1732 while ((req = *reqp++) != 0)
1734 if (req == SOLVABLE_PREREQMARKER)
1754 if (!strncmp(
"patch:",
id2str(pool, s->
name), 6))
1757 while ((con = *conp++) != 0)
1764 if ((m == 1 || m == 17) &&
ISRELDEP(con))
1775 if (s->
repo && s->
repo != oldinstalled)
1777 Id p2, obs, *obsp, *pp;
1782 while ((obs = *obsp++) != 0)
1796 if (s2->
name == s->
name && (map[p2] & 1) != 0)
1814 for (i = 0; i < pkgs->
count; i++)
1883 const unsigned char *
1915 if (!conflicts->
count)
1918 for (i = 0; i < conflicts->
count; i += 5)