[fpc-pascal] Bug in AnsiCompareText of cwstring

Jonas Maebe jonas.maebe at elis.ugent.be
Wed Nov 27 13:40:23 CET 2013


On 27 Nov 2013, at 13:05, Mattias Gaertner wrote:

> When using the cwstring widestringmanager the function AnsiCompareText
> seems to have a bug.
>
> For example:
>
> {$mode objfpc}{$H+}
>
> uses
>  Classes, SysUtils, cwstring;
> begin
>  writeln('o   and .   gives ',AnsiCompareText('o','.'));
>  writeln('oc  and .o  gives ',AnsiCompareText('oc','.o'));
>  writeln('oce and .ou gives ',AnsiCompareText('oce','.ou'));
> end.
>
> Result:
>
> o   and .   gives 1
> oc  and .o  gives 1
> oce and .ou gives -18
>
> I tested on Linux 64bit with fpc 2.6.2 and 2.7.1 (rev 25875).

Under Mac OS X 10.5 I get:

o   and .   gives 33
oc  and .o  gives 33
oce and .ou gives 33

Under Linux I get the same as you with an UTF-8 locale. With LANG=C, I  
get "1" as result for each comparison under Linux though.

> See bug report
> http://bugs.freepascal.org/view.php?id=25378
>
> What is the state of the cwstring manager?

Fully functional and supported. It can of course nevertheless contain  
bugs. This looks more like a potential bug in glibc though, but I'd  
have to check in more detail to confirm that (for which I don't have  
time right now).


Jonas



More information about the fpc-pascal mailing list