muss ich bei Labels in C nur die nächste Zeile beachten oder wie weit ersteckt sich hier das Label Z:
fsih ist als DWord deklariert und wird ohne Umwandlung als PLPSTR ausgegeben hab ich da was übersehen
Delphi-Quellcode:
LPSTR *FindData(LPSTR *buff, long bnum, char *data, int dnum)
{
Z: fsih = memchr(buff, data[0], bnum); // Szukanie pierwszego bajtu danych
if(fsih) // Znaleziono pierwszy bajt danych
{if(fsih+dnum > (long)buff+bnum) return 0; // Szukane dane są dłuższe od liczby bajtów, które pozostały do końca bloku pamięci
if(!memcmp(fsih+1, data+1, dnum-1)) return fsih; // Znaleziono kolejne bajty danych
else // Nie znaleziono kolejnych bajtów danych (zwiększenie pozycji szukania o 1 i ponowne szukanie)
{bnum = bnum-(fsih+1-(long)buff);
buff = fsih+1;
goto Z;}}
else return 0; // Nie znaleziono pierwszego bajtu danych
}
Delphi-Quellcode:
function memchr(
const buf: Pointer; c: Char; len: size_t): Pointer;
var
l: Char;
begin
Result := buf;
l := c;
while len <> 0
do
begin
if PChar(Result)[0] = l
then
Exit;
Inc(Integer(Result));
Dec(len);
end;
Result :=
Nil;
end;
Function FindData(buff: PLPSTR; bnum: long; data: PChar; dnum: Integer): PLPSTR;
begin
if (fsih) <> 0
then // Znaleziono pierwszy bajt danych
begin
if (fsih + dnum) > (long(buff) + bnum)
then
Exit;
// Szukane dane są dłuższe od liczby bajtów, które pozostały do końca bloku pamięci
if not CompareMem(Pointer(fsih + 1), data + 1, dnum - 1)
then
Result := PLPSTR(fsih)
// Znaleziono kolejne bajty danych
else // Nie znaleziono kolejnych bajtów danych (zwiększenie pozycji szukania o 1 i ponowne szukanie)
begin
bnum := bnum - (fsih + 1 - long(buff));
buff := PLPSTR(fsih + 1);
fsih := DWord(memchr(buff, data[0], bnum));
end;
end
else
Exit;
// Nie znaleziono pierwszego bajtu danych
end;