otherwise a pre_release might be interpreted as a revision
evr = pool_id2str(pool, s->evr);
arch = pool_id2str(pool, s->arch);
release = strrchr(evr, '-');
evr = pool_id2str(pool, s->evr);
arch = pool_id2str(pool, s->arch);
release = strrchr(evr, '-');
+ /* haikus releases start numeric */
+ if (release && pool->disttype == DISTTYPE_HAIKU && (release[1] < '0' || release[1] > '9'))
+ release = evr + strlen(evr);
if (!release)
release = evr + strlen(evr);
fprintf(fp, "=Pkg: %s %.*s %s %s\n", name, (int)(release - evr), evr, *release && release[1] ? release + 1 : "-", arch);
if (!release)
release = evr + strlen(evr);
fprintf(fp, "=Pkg: %s %.*s %s %s\n", name, (int)(release - evr), evr, *release && release[1] ? release + 1 : "-", arch);
for (s2 = evr2, r2 = 0; *s2; s2++)
if (*s2 == '-')
r2 = s2;
for (s2 = evr2, r2 = 0; *s2; s2++)
if (*s2 == '-')
r2 = s2;
+ if (pool->disttype == DISTTYPE_HAIKU)
+ {
+ /* make sure it's really a release, releases always are numeric */
+ if (r1 && (r1[1] < '0' || r1[1] > '9'))
+ r1 = 0;
+ if (r2 && (r2[1] < '0' || r2[1] > '9'))
+ r2 = 0;
+ }
r = 0;
if (mode != EVRCMP_MATCH || (evr1 != (r1 ? r1 : s1) && evr2 != (r2 ? r2 : s2)))
r = solv_vercmp(evr1, r1 ? r1 : s1, evr2, r2 ? r2 : s2);
r = 0;
if (mode != EVRCMP_MATCH || (evr1 != (r1 ? r1 : s1) && evr2 != (r2 ? r2 : s2)))
r = solv_vercmp(evr1, r1 ? r1 : s1, evr2, r2 ? r2 : s2);
for (s1 = evr1, r1 = 0; *s1; s1++)
if (*s1 == '-')
r1 = s1;
for (s1 = evr1, r1 = 0; *s1; s1++)
if (*s1 == '-')
r1 = s1;
+ if (pool->disttype == DISTTYPE_HAIKU)
+ {
+ /* make sure it's really a release, releases always are numeric */
+ if (r1 && (r1[1] < '0' || r1[1] > '9'))
+ r1 = 0;
+ }
if (version)
{
r = solv_vercmp(evr1, r1 ? r1 : s1, version, version + strlen(version));
if (version)
{
r = solv_vercmp(evr1, r1 ? r1 : s1, version, version + strlen(version));