21 #if defined(DEBIAN_SEMANTICS) || defined(MULTI_SEMANTICS)
23 #ifdef MULTI_SEMANTICS
24 # define sat_vercmp sat_vercmp_deb
29 sat_vercmp(
const char *s1,
const char *q1,
const char *s2,
const char *q2)
34 c1 = s1 < q1 ? *(
const unsigned char *)s1++ : 0;
35 c2 = s2 < q2 ? *(
const unsigned char *)s2++ : 0;
36 if ((c1 >=
'0' && c1 <=
'9') && (c2 >=
'0' && c2 <=
'9'))
39 c1 = s1 < q1 ? *(
const unsigned char *)s1++ : 0;
41 c2 = s2 < q2 ? *(
const unsigned char *)s2++ : 0;
43 while ((c1 >=
'0' && c1 <=
'9') && (c2 >=
'0' && c2 <=
'9'))
47 c1 = s1 < q1 ? *(
const unsigned char *)s1++ : 0;
48 c2 = s2 < q2 ? *(
const unsigned char *)s2++ : 0;
50 if (c1 >=
'0' && c1 <=
'9')
52 if (c2 >=
'0' && c2 <=
'9')
55 return r < 0 ? -1 : 1;
57 c1 = c1 ==
'~' ? -1 : !c1 || (c1 >=
'0' && c1 <= '9') || (c1 >=
'A' && c1 <= 'Z') || (c1 >=
'a' && c1 <=
'z') ? c1 : c1 + 256;
58 c2 = c2 ==
'~' ? -1 : !c2 || (c2 >=
'0' && c2 <= '9') || (c2 >=
'A' && c2 <= 'Z') || (c2 >=
'a' && c2 <=
'z') ? c2 : c2 + 256;
61 return r < 0 ? -1 : 1;
67 #ifdef MULTI_SEMANTICS
73 #if !defined(DEBIAN_SEMANTICS) || defined(MULTI_SEMANTICS)
79 sat_vercmp(
const char *s1,
const char *q1,
const char *s2,
const char *q2)
84 while (s1 < q1 && s2 < q2)
86 while (s1 < q1 && !(*s1 >=
'0' && *s1 <=
'9') &&
87 !(*s1 >=
'a' && *s1 <=
'z') && !(*s1 >=
'A' && *s1 <=
'Z'))
89 while (s2 < q2 && !(*s2 >=
'0' && *s2 <=
'9') &&
90 !(*s2 >=
'a' && *s2 <=
'z') && !(*s2 >=
'A' && *s2 <=
'Z'))
92 if ((*s1 >=
'0' && *s1 <=
'9') || (*s2 >=
'0' && *s2 <=
'9'))
94 while (*s1 ==
'0' && s1[1] >=
'0' && s1[1] <=
'9')
96 while (*s2 ==
'0' && s2[1] >=
'0' && s2[1] <=
'9')
98 for (e1 = s1; *e1 >=
'0' && *e1 <=
'9'; )
100 for (e2 = s2; *e2 >=
'0' && *e2 <=
'9'; )
102 r = (e1 - s1) - (e2 - s2);
104 r = strncmp(s1, s2, e1 - s1);
106 return r > 0 ? 1 : -1;
110 for (e1 = s1; (*e1 >=
'a' && *e1 <= 'z') || (*e1 >=
'A' && *e1 <=
'Z'); )
112 for (e2 = s2; (*e2 >=
'a' && *e2 <= 'z') || (*e2 >=
'A' && *e2 <=
'Z'); )
114 r = (e1 - s1) - (e2 - s2);
117 r = strncmp(s1, s2, e2 - s2);
118 return r >= 0 ? 1 : -1;
122 r = strncmp(s1, s2, e1 - s1);
123 return r <= 0 ? -1 : 1;
125 r = strncmp(s1, s2, e1 - s1);
127 return r > 0 ? 1 : -1;
132 return s1 < q1 ? 1 : s2 < q2 ? -1 : 0;
137 #if defined(MULTI_SEMANTICS)
138 # define sat_vercmp (*(pool->disttype == DISTTYPE_DEB ? &sat_vercmp_deb : &sat_ver##cmp))
153 POOL_DEBUG(DEBUG_EVRCMP,
"evrcmp %s %s mode=%d\n", evr1, evr2, mode);
155 for (s1 = evr1; *s1 >=
'0' && *s1 <=
'9'; s1++)
157 for (s2 = evr2; *s2 >=
'0' && *s2 <=
'9'; s2++)
159 if (mode ==
EVRCMP_MATCH && (*evr1 ==
':' || *evr2 ==
':'))
169 if (s1 == evr1 || *s1 !=
':')
171 if (s2 == evr2 || *s2 !=
':')
200 for (s1 = evr1, r1 = 0; *s1; s1++)
203 for (s2 = evr2, r2 = 0; *s2; s2++)
208 if (mode !=
EVRCMP_MATCH || (evr1 != (r1 ? r1 : s1) && evr2 != (r2 ? r2 : s2)))
209 r =
sat_vercmp(evr1, r1 ? r1 : s1, evr2, r2 ? r2 : s2);
224 if (s1 != ++r1 && s2 != ++r2)
233 const char *evr1, *evr2;
234 if (evr1id == evr2id)
236 evr1 =
id2str(pool, evr1id);
237 evr2 =
id2str(pool, evr2id);
249 evr1 =
id2str(pool, evrid);
250 for (s1 = evr1; *s1 >=
'0' && *s1 <=
'9'; s1++)
252 if (s1 != evr1 && *s1 ==
':')
256 r =
sat_vercmp(evr1, s1, epoch, epoch + strlen(epoch));
264 while (*epoch ==
'0')
269 for (s1 = evr1, r1 = 0; *s1; s1++)
274 r =
sat_vercmp(evr1, r1 ? r1 : s1, version, version + strlen(version));
282 r =
sat_vercmp(r1 + 1, s1, release, release + strlen(release));