Skip to content
  • Mark Adler's avatar
    Allow gzread() and related to continue after gzclearerr(). · 5ad116ab
    Mark Adler authored
    Before this fix, gzread() would lose data if a premature end of file
    was encountered.  This prevented gzread() from being used on a file
    that was being written concurrently.  Now gzread() returns all of the
    data it has available before indicating a premature end of file.
    
    This also changes the error returned on a premature end of file from
    Z_DATA_ERROR to Z_BUF_ERROR.  This allows the user to determine if
    the error is recoverable, which it is if Z_BUF_ERROR is returned.  If
    a Z_DATA_ERROR is returned, then the error is not recoverable.
    
    This patch replaces the functionality of a previous patch that fixed
    reading through an empty gzip stream in a concatenation of gzip
    streams.
    
    To implement this fix, a noticeable rewrite of gzread.c was needed.
    The patch has the added advantage of using inflate's gzip processing
    instead of replicating the functionality in gzread.c.  This makes the
    gz code a little simpler.
    5ad116ab