Den 18-04-2013 07:57, Reinier Olislagers skrev:
Hi all,

(FPC 2.6.2 x86, trunk x64, on Windows; found similar behaviour on Linux x64)

Busy getting DBase III memo support correct ;)

In fcl-db\src\dbase\dbf_common.pas we find this part used to e.g. find
end of file ($1A/ASCII 26) markers in a buffer with memo data: [1]

The problem is: the first MemScan function doesn't work:
System.IndexByte just always return -1 even if the character is there.
Tried system.indexbyte with a simple test program and of course it worked.
If I comment out $ifdef fpc to force use of the second function, the $1A
is found perfectly.

Where lies the problem?

Thanks,
Reinier

[1]
{$ifdef FPC}
function MemScan(const Buffer: Pointer; Chr: Byte; Length: Integer):
Pointer;
var
   I: Integer;
begin
   I := System.IndexByte(Buffer, Length, Chr);
   if I = -1 then
     Result := nil
   else
     Result := Buffer+I;
end;

{$else}

function MemScan(const Buffer: Pointer; Chr: Byte; Length: Integer):
Pointer;
asm
         PUSH    EDI
         MOV     EDI,Buffer
         MOV     AL, Chr
         MOV     ECX,Length
         REPNE   SCASB
         MOV     EAX,0
         JNE     @@1
         MOV     EAX,EDI
         DEC     EAX
@@1:    POP     EDI
end;

{$endif}

Since you have a typed const pointer instead of an untyped const parameter, you need to do this:

System.IndexByte(PByte(Buffer)^, Length, Chr);

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to