[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