11 #define _RPMEVR_INTERNAL
17 #define SKIPWHITE(_x) {while(*(_x) && (xisspace(*_x) || *(_x) == ',')) (_x)++;}
18 #define SKIPNONWHITE(_x){while(*(_x) &&!(xisspace(*_x) || *(_x) == ',')) (_x)++;}
23 const char *r, *re, *v, *ve;
30 tagflags |= RPMSENSE_PROVIDES;
34 tagflags |= RPMSENSE_OBSOLETES;
38 tagflags |= RPMSENSE_CONFLICTS;
42 tagflags |= RPMSENSE_CONFLICTS;
46 tagflags |= RPMSENSE_ANY;
50 tagflags |= RPMSENSE_TRIGGERPREIN;
54 tagflags |= RPMSENSE_TRIGGERIN;
58 tagflags |= RPMSENSE_TRIGGERPOSTUN;
62 tagflags |= RPMSENSE_TRIGGERUN;
67 tagflags |= RPMSENSE_MISSINGOK;
72 tagflags |= RPMSENSE_ANY;
76 tagflags |= RPMSENSE_PROVIDES;
80 tagflags |= RPMSENSE_OBSOLETES;
85 tagflags |= RPMSENSE_ANY;
90 for (r = field; *r !=
'\0'; r = re) {
100 if (!(
xisalnum(r[0]) || r[0] ==
'_' || r[0] ==
'/'
101 || (nr > 2 && r[0] ==
'!')
102 || (nr > 3 && r[0] ==
'%' && r[1] ==
'{' && r[nr-1] ==
'}')))
105 _(
"line %d: Dependency \"%s\" must begin with alpha-numeric, '_' or '/': %s\n"),
113 strncpy(N, r, (re-r));
129 if (F && r[0] ==
'/') {
131 _(
"line %d: Versioned file name not permitted: %s\n"),
147 if (*v ==
'\0' || ve == v) {
153 strncpy(EVR, v, (ve-v));
161 EVR_t evr = memset(
alloca(
sizeof(*evr)), 0,
sizeof(*evr));
164 evr->str =
_free(evr->str);
167 _(
"line %d: EVR does not parse: %s\n"),
175 (void)
addReqProv(spec, h, tagN, N, EVR, Flags, index);