[devel] zlib/gzio.c: inconsistent gzeof()
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Мар 6 15:25:11 MSK 2008
Я обнаружил, что gzeof() ведёт себя по-разному, в зависимости от того,
находимся ли мы режиме "transparent" (cat) или же в режиме настоящего
разжатия.
А именно, в режиме настоящего разжатия, если прочитано батйтов меньше,
чем запрошено, то (автоматически) выставляется флаг EOF. В transparent
режиме, если прочитано меньше, чем требуется, то флаг EOF выставляется
только после следующего gzread(), который возвращает 0.
$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <zlib.h>
int main(int argc, char *argv[])
{
gzFile gz = gzopen(argv[1], "rb");
assert(gz);
char buf[BUFSIZ];
int n = gzread(gz, buf, sizeof(buf));
printf("n=%d eof=%d\n", n, gzeof(gz));
return 0;
}
$ echo a >a
$ echo a |gzip >a.gz
$ gcc -Wall test.c -lz
$ ./a.out a.gz
n=2 eof=1
$ ./a.out a
n=2 eof=0
$
Хотел спросить, надо это фиксить или нет.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080306/0ecdd17d/attachment-0002.bin>
Подробная информация о списке рассылки Devel