30 #define IDARRAY_BLOCK 4095
48 repo->
name = name ? strdup(name) : 0;
89 for (i = repo->
start, s = pool->
solvables + i; i < repo->end; i++, s++)
91 memset(s, 0,
sizeof(*s));
120 for (i = 0; i < pool->
nrepos; i++)
121 if (pool->
repos[i] == repo)
125 if (i < pool->nrepos - 1)
129 for (; i < pool->
nrepos - 1; i++)
142 for (i = 0; i < pool->
nrepos; i++)
155 if (start + count == repo->
end)
161 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
162 if (data->
end > repo->
end)
174 #define REPO_SIDEDATA_BLOCK 63
188 int d = repo->
start - p;
190 memmove((
char *)b + d * size, b, n * size);
191 memset(b, 0, d * size);
194 if (p + count > repo->
end)
196 int d = p + count - repo->
end;
198 memset((
char *)b + n * size, 0, d * size);
229 olddeps = idarraysize;
232 else if (olddeps == repo->
lastoff)
237 olddeps = idarraysize;
238 for (; idarray[i]; i++)
241 idarray[idarraysize++] = idarray[i];
246 idarray[idarraysize++] = id;
248 idarray[idarraysize++] = 0;
269 Id oid, *oidp, *markerp;
281 for (oidp = repo->
idarraydata + olddeps; (oid = *oidp) != ID_NULL; oidp++)
296 for (oidp = repo->
idarraydata + olddeps; (oid = *oidp) != ID_NULL; oidp++)
306 if (markerp || before)
310 for (; (oid = *oidp) != ID_NULL; oidp++)
318 memmove(markerp, markerp + 1, (oidp - markerp) *
sizeof(
Id));
324 memmove(markerp, markerp + 1, (oidp - markerp) *
sizeof(
Id));
329 if (!before && !markerp)
331 else if (before && markerp)
336 memmove(markerp + 1, markerp, (oidp - markerp) *
sizeof(
Id));
365 if (olddeps && olddeps != repo->
lastoff)
375 for (idstart = idend = repo->
idarraydata + olddeps; *idend++; )
377 count = idend - idstart - 1 + num;
382 memcpy(repo->
idarraydata + olddeps, idstart, count - num);
407 char buf[1024], *p, *dep;
417 dep = (
char *)
id2str(pool,
id);
418 if (!strncmp(dep,
"locale(", 7) && strlen(dep) <
sizeof(buf) - 2)
421 strcpy(buf + 2, dep);
423 if ((p = strchr(dep,
':')) != 0 && p != dep)
426 idp =
str2id(pool, dep, 1);
430 while ((p = strchr(dep,
';')) != 0)
439 strncpy(dep - 9,
"language:", 9);
440 idl =
str2id(pool, dep - 9, 1);
442 idl =
str2id(pool, dep, 1);
451 if (dep[0] && dep[1])
453 for (p = dep; *p && *p !=
')'; p++)
457 strncpy(dep - 9,
"language:", 9);
458 idl =
str2id(pool, dep - 9, 1);
460 idl =
str2id(pool, dep, 1);
473 else if ((p = strchr(dep,
':')) != 0 && p != dep && p[1] ==
'/' && strlen(dep) <
sizeof(buf))
478 idp =
str2id(pool, buf, 1);
481 while (l > 1 && p[l - 1] ==
'/')
497 dep = (
char *)
id2str(pool,
id);
498 if (!strncmp(dep,
"system:modalias(", 16))
500 if (!strncmp(dep,
"modalias(", 9) && dep[9] && dep[10] && strlen(dep) <
sizeof(buf))
503 p = strchr(buf + 9,
':');
504 if (p && p != buf + 9 && strchr(p + 1,
':'))
507 idp =
str2id(pool, buf + 9, 1);
508 p[strlen(p) - 1] = 0;
516 p[strlen(p) - 1] = 0;
523 else if (!strncmp(dep,
"packageand(", 11) && strlen(dep) <
sizeof(buf))
528 while ((p = strchr(dep,
':')) != 0)
536 idp =
str2id(pool, dep, 1);
543 if (dep[0] && dep[1])
545 dep[strlen(dep) - 1] = 0;
546 idp =
str2id(pool, dep, 1);
555 else if (!strncmp(dep,
"filesystem(", 11) && strlen(dep) <
sizeof(buf))
557 strcpy(buf, dep + 11);
558 if ((p = strrchr(buf,
')')) != 0)
560 id =
str2id(pool, buf, 1);
568 Id idsupp = 0, idfresh = 0;
597 char buf[1024], *p, *dep;
609 dep = (
char *)
id2str(pool,
id);
610 if (!strncmp(dep,
"otherproviders(", 15) && strlen(dep) <
sizeof(buf) - 2)
612 strcpy(buf, dep + 15);
613 if ((p = strchr(buf,
')')) != 0)
615 id =
str2id(pool, buf, 1);
672 for (; *ida && !md->
stop; ida++)
675 kv.
eof = ida[1] ? 0 : 1;
676 repo_matchvalue(md, s, 0, solvablekeys + (keyname - SOLVABLE_NAME), &kv);
738 case SOLVABLE_VENDOR:
746 case SOLVABLE_PROVIDES:
751 case SOLVABLE_OBSOLETES:
756 case SOLVABLE_CONFLICTS:
761 case SOLVABLE_REQUIRES:
766 case SOLVABLE_RECOMMENDS:
771 case SOLVABLE_SUPPLEMENTS:
776 case SOLVABLE_SUGGESTS:
781 case SOLVABLE_ENHANCES:
790 repo_matchvalue(md, s, 0, solvablekeys + (RPM_RPMDBID - SOLVABLE_NAME), &kv);
800 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
802 if (p < data->start || p >= data->
end)
811 for (j = 1; j < data->
nkeys; j++)
812 if (data->
keys[j].
name != REPOSITORY_SOLVABLES && data->
keys[j].
name != SOLVABLE_FILELIST)
814 if (j == data->
nkeys)
821 for (j = 1; j < data->
nkeys; j++)
824 if (j == data->
nkeys)
842 repo_search(
Repo *repo,
Id p,
Id keyname,
const char *match,
int flags,
int (*
callback)(
void *cbdata,
Solvable *s,
Repodata *data,
Repokey *key,
KeyValue *kv),
void *cbdata)
848 memset(&md, 0,
sizeof(md));
878 case SOLVABLE_VENDOR:
882 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
884 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
907 if (keyname == RPM_RPMDBID)
909 if (repo->
rpmdbid && entry >= repo->
start && entry < repo->end)
914 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
916 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
945 case SOLVABLE_VENDOR:
949 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
951 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
985 case SOLVABLE_PROVIDES:
987 case SOLVABLE_OBSOLETES:
989 case SOLVABLE_CONFLICTS:
991 case SOLVABLE_REQUIRES:
993 case SOLVABLE_RECOMMENDS:
995 case SOLVABLE_SUGGESTS:
997 case SOLVABLE_SUPPLEMENTS:
999 case SOLVABLE_ENHANCES:
1003 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
1005 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
1013 for (i = 0; i < q->
count; i++)
1025 const unsigned char *
1030 const unsigned char *chk;
1032 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
1034 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
1062 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
1064 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
1070 return type == REPOKEY_TYPE_VOID;
1082 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
1084 if (entry !=
SOLVID_META && (entry < data->start || entry >= data->
end))
1090 return type == REPOKEY_TYPE_DELETED ? 0 : type;
1103 for (i = repo->
nrepodata - 1; i >= 0; i--)
1117 for (i = repo->
nrepodata - 1; i >= 0; i--)
1128 for (i = repo->
nrepodata - 1; i >= 0; i--)
1151 case SOLVABLE_VENDOR:
1168 if (keyname == RPM_RPMDBID)
1191 case SOLVABLE_VENDOR:
1211 case SOLVABLE_VENDOR:
1233 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)
1244 for (i = 0, data = repo->
repodata; i < repo->nrepodata; i++, data++)