> > Your code can't work with these ones, 4.1.15 and 4.12.1 because you > only pad the 3rd (15 and 1), you need to pad each part of the > version, my pseudocode out 4.1[space].15 and 4.12.1[space]. You can > call your function with the 4,4; again with 12,1 utnil you get a > result.... but you need a ternary boolean, as 4,4 generates an > invalid result state. Turns out there is a deeper flaw anyway :s Neither version works with for example this one: 2.8.7 - 2.8.13 Even if you pad 2.8.7 you still end up with a failure. The only way to prevent said failure is to pad it at the beginning: 2.8. 7 < 2.8.13 But THAT way around breaks a whole bunch of others for example in my case there is an older package versioned 070utopia which needs to be seen as older than 071 (without the sub specifier) - THAT one only works if you pad at the end. So there is no way to predict which side you need to pad for the right result.
Considering that, I went back to the debian algorithm. True it's a very c-like approach to things, but it does seem to work and I guess if it works for debian that's a fairly major vote of confidence. Here is my code (note that FirstNonDigit and FirstDigit are functions I wrote, which return the pos of the first digit/nondigit in the string - either returns -1 in case of no match). Begin Done := False; Res := False; repeat If (FirstNonDigit(V1) = -1) and (FirstDigit(V1) = -1) then Done := True; IF FirstNonDigit(V1) < FirstDigit(V1) then begin S1 := Copy(V1,1,FirstDigit(V1) -1); Delete(V1,1,firstDigit(v1) -1); S2 := Copy(V2,1,FirstDigit(V2) -1); Delete(V2,1,FirstDigit(v2) -1); If S1 <> S2 then begin Done := True; If S1 > S2 then Res := True; end; end; IF (FirstNonDigit(V1) > FirstDigit(V1)) and (Not Done) then begin S1 := Copy(V1,1,FirstNonDigit(V1) -1); Delete(V1,1,firstNonDigit(v1) -1); S2 := Copy(V2,1,FirstNonDigit(V2) -1); Delete(V2,1,FirstNonDigit(v2) -1); If StrToInt(S1) <> StrToInt(S2) then Done := True; If StrToInt(S1) > StrToInt(S2) then Res := True; end; until done; CompareVersion := Res; end; -- "there's nothing as inspirational for a hacker as a cat obscuring a bug by sitting in front of the monitor" - Boudewijn Rempt A.J. Venter Chief Software Architect OpenLab International www.getopenlab.com www.silentcoder.co.za +27 82 726 5103 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal