[fpc-devel] patch minigzip
    Daniël Mantione 
    daniel.mantione at freepascal.org
       
    Fri Sep  8 11:51:02 CEST 2006
    
    
  
Op Fri, 8 Sep 2006, schreef Jonas Maebe:
> 
> On 8 sep 2006, at 11:03, Jonas Maebe wrote:
> 
> > > > There are no endian conversions at all in the paszlib package,
> > > > which is
> > > > IMHO impossible for correct behaviour but many of these
> > > > constructions. To
> > > > be sure, can you test minigzip on OS X?
> > > 
> > > It works fine (I compressed a file with minigzip and uncompressed it
> > > with gunzip).
> > 
> > Actually, it doesn't: decompressing with minigzip fails.
> 
> It's even stranger: minigzip uncompresses the file fine (created with gzip),
> the result is bytewise identical to the original, yet it complains about a
> "data error".
I think I found the problem:
function getLong(s : gz_streamp) : cardinal;
var
  x : packed array [0..3] of byte;
  c : integer;
begin
  { x := cardinal(get_byte(s));  - you can't do this with TP, no unsigned 
longint }
  { the following assumes a little endian machine and TP }
  x[0] := Byte(get_byte(s));
  x[1] := Byte(get_byte(s));
  x[2] := Byte(get_byte(s));
  c := get_byte(s);
  x[3] := Byte(c);
  if (c = Z_EOF) then
    s^.z_err := Z_DATA_ERROR;
  GetLong := cardinal(longint(x));
end;
I've committed a fix.
Daniël
    
    
More information about the fpc-devel
mailing list