From bfe41a49e2afbb70314835d0ee6fd81f973bd1df Mon Sep 17 00:00:00 2001 From: daniel Date: Sat, 9 Sep 2006 10:02:57 +0000 Subject: [PATCH] + FPC supports pointer arithmetic. git-svn-id: trunk@4579 - --- packages/base/paszlib/gzio.pas | 13 +++++++++++-- packages/base/paszlib/zconf.inc | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/base/paszlib/gzio.pas b/packages/base/paszlib/gzio.pas index 5660948f12..dc46d277c3 100644 --- a/packages/base/paszlib/gzio.pas +++ b/packages/base/paszlib/gzio.pas @@ -531,7 +531,6 @@ var s : gz_streamp; start : Pbyte; - next_out : Pbyte; n : cardinal; crclen : cardinal; { Buffer length to update CRC32 } filecrc : cardinal; { CRC32 stored in GZIP'ed file } @@ -539,6 +538,9 @@ var bytes : integer; { bytes actually read in I/O blockread } total_in : cardinal; total_out : cardinal; +{$ifndef pointer_arith} + next_out : Pbyte; +{$endif} begin @@ -605,11 +607,15 @@ begin if (s^.z_err = Z_STREAM_END) then begin crclen := 0; + {$ifdef pointer_arith} + crclen:=s^.stream.next_out-start; + {$else} next_out := s^.stream.next_out; while (next_out <> start ) do begin dec (next_out); inc (crclen); { Hack because Pascal cannot substract pointers } end; + {$endif} { Check CRC and original size } s^.crc := crc32(s^.crc, start, crclen); start := s^.stream.next_out; @@ -639,13 +645,16 @@ begin end; {WHILE} crclen := 0; +{$ifdef pointer_arith} + crclen:=s^.stream.next_out-start; +{$else} next_out := s^.stream.next_out; while (next_out <> start ) do begin dec (next_out); inc (crclen); { Hack because Pascal cannot substract pointers } end; s^.crc := crc32 (s^.crc, start, crclen); - +{$endif} gzread := integer(len - s^.stream.avail_out); end; diff --git a/packages/base/paszlib/zconf.inc b/packages/base/paszlib/zconf.inc index fe21025eae..316e1e0941 100644 --- a/packages/base/paszlib/zconf.inc +++ b/packages/base/paszlib/zconf.inc @@ -28,6 +28,7 @@ {$IFDEF FPC} {$DEFINE Use32} + {$DEFINE pointer_arith} {$UNDEF DPMI} {$UNDEF MSDOS} {$UNDEF UNALIGNED_OK} { requires SizeOf(ush) = 2 ! }