1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
static void
update_provides(const URPM__Package pkg, HV *provides) {
if (pkg->h) {
int len;
struct rpmtd_s td, td_flags;
unsigned int i;
/* examine requires for files which need to be marked in provides */
if (headerGet(pkg->h, RPMTAG_REQUIRENAME, &td, HEADERGET_DEFAULT)) {
for (i = 0; i < rpmtdCount(&td); ++i) {
const char *s = rpmtdNextString(&td);
len = strlen(s);
if (s[0] == '/') (void)hv_fetch(provides, s, len, 1);
}
}
/* update all provides */
if (headerGet(pkg->h, RPMTAG_PROVIDENAME, &td, HEADERGET_DEFAULT)) {
char **list = td.data;
rpmsenseFlags *flags = NULL;
if (headerGet(pkg->h, RPMTAG_PROVIDEFLAGS, &td_flags, HEADERGET_DEFAULT))
flags = td_flags.data;
for (i = 0; i < rpmtdCount(&td); ++i) {
len = strlen(list[i]);
if (!strncmp(list[i], "rpmlib(", 7)) continue;
update_hash_entry(provides, list[i], len, 1, flags && flags[i] & (RPMSENSE_PREREQ|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_POST|RPMSENSE_LESS|RPMSENSE_EQUAL|RPMSENSE_GREATER),
pkg);
}
}
} else {
char *ps, *s, *es;
if ((s = pkg->requires) != NULL && *s != 0) {
ps = strchr(s, '@');
/* examine requires for files which need to be marked in provides */
while(ps != NULL) {
if (s[0] == '/') {
*ps = 0; es = strchr(s, '['); if (!es) es = strchr(s, ' '); *ps = '@';
(void)hv_fetch(provides, s, es != NULL ? es-s : ps-s, 1);
}
s = ps + 1; ps = strchr(s, '@');
}
if (s[0] == '/') {
es = strchr(s, '['); if (!es) es = strchr(s, ' ');
(void)hv_fetch(provides, s, es != NULL ? (U32)(es-s) : strlen(s), 1);
}
}
/* update all provides */
if ((s = pkg->provides) != NULL && *s != 0) {
ps = strchr(s, '@');
while(ps != NULL) {
*ps = 0; es = strchr(s, '['); if (!es) es = strchr(s, ' '); *ps = '@';
update_hash_entry(provides, s, es != NULL ? es-s : ps-s, 1, es != NULL, pkg);
s = ps + 1; ps = strchr(s, '@');
}
es = strchr(s, '['); if (!es) es = strchr(s, ' ');
update_hash_entry(provides, s, es != NULL ? es-s : 0, 1, es != NULL, pkg);
}
}
|