Merge no-meta branch
--HG--
branch : HEAD
diff --git a/lib/zip_fread.c b/lib/zip_fread.c
index 7950dc9..1e21326 100644
--- a/lib/zip_fread.c
+++ b/lib/zip_fread.c
@@ -1,5 +1,5 @@
/*
- $NiH: zip_fread.c,v 1.7 2003/03/16 10:21:39 wiz Exp $
+ $NiH: zip_fread.c,v 1.8.4.3 2004/04/13 19:47:59 dillo Exp $
zip_fread.c -- read from file
Copyright (C) 1999 Dieter Baron and Thomas Klausner
@@ -40,30 +40,30 @@
-int
-zip_fread(struct zip_file *zff, char *outbuf, int toread)
+ssize_t
+zip_fread(struct zip_file *zff, void *outbuf, size_t toread)
{
int len, out_before, ret;
if (!zff)
return -1;
- if ((zff->flags == -1) || (toread == 0))
- return 0;
-
- if (zff->flags != 0)
+ if (zff->error.zip_err != 0)
return -1;
+ if ((zff->flags & ZIP_ZF_EOF) || (toread == 0))
+ return 0;
+
if (zff->bytes_left == 0) {
- zff->flags = -1;
+ zff->flags |= ZIP_ZF_EOF;
if (zff->crc != zff->crc_orig) {
- zff->flags = ZERR_CRC;
+ _zip_error_set(&zff->error, ZERR_CRC, 0);
return -1;
}
return 0;
}
- if (zff->method == 0) {
+ if (zff->flags & ZIP_ZF_COMP) {
ret = _zip_file_fillbuf(outbuf, toread, zff);
if (ret > 0) {
zff->crc = crc32(zff->crc, outbuf, ret);
@@ -90,16 +90,15 @@
if (len >= zff->bytes_left || len >= toread) {
zff->crc = crc32(zff->crc, outbuf, len);
zff->bytes_left -= len;
- return(len);
+ return len;
}
break;
case Z_BUF_ERROR:
if (zff->zstr->avail_in == 0) {
- /* read some more bytes */
len = _zip_file_fillbuf(zff->buffer, BUFSIZE, zff);
if (len == 0) {
- zff->flags = ZERR_INCONS;
+ _zip_error_set(&zff->error, ZERR_INCONS, 0);
return -1;
}
else if (len < 0)
@@ -108,13 +107,12 @@
zff->zstr->avail_in = len;
continue;
}
- zff->flags = ZERR_ZLIB;
- return -1;
+ /* fallthrough */
case Z_NEED_DICT:
case Z_DATA_ERROR:
case Z_STREAM_ERROR:
case Z_MEM_ERROR:
- zff->flags = ZERR_ZLIB;
+ _zip_error_set(&zff->error, ZERR_ZLIB, ret);
return -1;
}
}