12 vercmp( const char *s1, const char *q1, const char *s2, const char *q2 )
17 while (s1 < q1 && s2 < q2)
19 while (s1 < q1 && !(*s1 >= '0' && *s1 <= '9') &&
20 !(*s1 >= 'a' && *s1 <= 'z') && !(*s1 >= 'A' && *s1 <= 'Z'))
22 while (s2 < q2 && !(*s2 >= '0' && *s2 <= '9') &&
23 !(*s2 >= 'a' && *s2 <= 'z') && !(*s2 >= 'A' && *s2 <= 'Z'))
25 if ((*s1 >= '0' && *s1 <= '9') || (*s2 >= '0' && *s2 <= '9'))
27 while (*s1 == '0' && s1[1] >= '0' && s1[1] <= '9')
29 while (*s2 == '0' && s2[1] >= '0' && s2[1] <= '9')
31 for (e1 = s1; *e1 >= '0' && *e1 <= '9'; )
33 for (e2 = s2; *e2 >= '0' && *e2 <= '9'; )
35 r = e1 - s1 - (e2 - s2);
37 r = strncmp(s1, s2, e1 - s1);
39 return r > 0 ? 1 : -1;
43 for (e1 = s1; (*e1 >= 'a' && *e1 <= 'z') || (*e1 >= 'A' && *e1 <= 'Z'); )
45 for (e2 = s2; (*e2 >= 'a' && *e2 <= 'z') || (*e2 >= 'A' && *e2 <= 'Z'); )
47 r = e1 - s1 - (e2 - s2);
50 r = strncmp(s1, s2, e2 - s2);
51 return r >= 0 ? 1 : -1;
55 r = strncmp(s1, s2, e1 - s1);
56 return r <= 0 ? -1 : 1;
58 r = strncmp(s1, s2, e1 - s1);
60 return r > 0 ? 1 : -1;
65 return s1 < q1 ? 1 : s2 < q2 ? -1 : 0;
69 // edition (e:v.r) compare
71 evrcmp( Pool *pool, Id evr1id, Id evr2id )
74 const char *evr1, *evr2;
80 evr1 = id2str( pool, evr1id );
81 evr2 = id2str( pool, evr2id );
84 printf("evrcmp %s %s\n", evr1, evr2);
86 for (s1 = evr1; *s1 >= '0' && *s1 <= '9'; s1++)
88 for (s2 = evr2; *s2 >= '0' && *s2 <= '9'; s2++)
90 if (s1 == evr1 || *s1 != ':')
92 if (s2 == evr2 || *s2 != ':')
96 r = vercmp( evr1, s1, evr2, s2 );
104 if (!pool->promoteepoch)
121 for (s1 = evr1, r1 = 0; *s1; s1++)
124 for (s2 = evr2, r2 = 0; *s2; s2++)
127 r = vercmp(evr1, r1 ? r1 : s1, evr2, r2 ? r2 : s2);
132 if (s1 != ++r1 && s2 != ++r2)
133 r = vercmp(r1, s1, r2, s2);