11 #define _RPMEVR_INTERNAL
17 #define SKIPWHITE(_x) {while(*(_x) && (xisspace(*_x) || *(_x) == ',')) (_x)++;}
18 #define SKIPNONWHITE(_x){while(*(_x) &&!(xisspace(*_x) || *(_x) == ',')) (_x)++;}
24 const char *r, *re, *v, *ve;
34 tagflags |= RPMSENSE_PROVIDES;
38 tagflags |= RPMSENSE_OBSOLETES;
42 tagflags |= RPMSENSE_CONFLICTS;
46 tagflags |= RPMSENSE_CONFLICTS;
50 tagflags |= RPMSENSE_ANY;
54 tagflags |= RPMSENSE_TRIGGERPREIN;
58 tagflags |= RPMSENSE_TRIGGERIN;
62 tagflags |= RPMSENSE_TRIGGERPOSTUN;
66 tagflags |= RPMSENSE_TRIGGERUN;
71 tagflags |= RPMSENSE_MISSINGOK;
76 tagflags |= RPMSENSE_ANY;
80 tagflags |= RPMSENSE_PROVIDES;
84 tagflags |= RPMSENSE_OBSOLETES;
89 tagflags |= RPMSENSE_ANY;
94 for (r = field; *r !=
'\0'; r = re) {
105 strncpy(N, r, (re-r));
113 if (!(
xisalnum(N[ix]) || N[ix] ==
'_' || N[ix] ==
'/' || N[ix] ==
'^'
114 || (nr > 5 && N[ix] ==
'%' && N[ix+1] ==
'{' && N[nr-1] ==
'}')))
117 _(
"line %d: Dependency \"%s\" must begin with alpha-numeric, '_' or '/': %s\n"),
135 if (F && r[0] ==
'/') {
137 _(
"line %d: Versioned file name not permitted: %s\n"),
157 while (v < ve && *v !=
'\0')
160 default: *t++ = *v++;
break;
177 if (!(nr > 3 && EVR[0] ==
'%' && EVR[1] ==
'{' && EVR[nr-1] ==
'}'))
179 memset(evr, 0,
sizeof(*evr));
181 evr->str =
_free(evr->str);
192 (void)
addReqProv(spec, h, tagN, N, EVR, Flags, index);