zlib - gzread fails after successful gzdopen on mswin32 -
there seems broken in windows build zlib 1.2.8. according usage.txt in http://zlib.net/zlib128-dll.zip (from zlib.net) , man pages gzread , gzdopen, code should work. can enlighten me, please? btw, have tested code on darwin (using zlib 1.2.5) , linux (using zlib 1.2.1) gzdopen works.
here's code:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include "zlib.h" int main(int argc, char *argv[]) { char buffer[500]; int len; gzfile gin; const char *errmsg; int errnum; char *fun = argv[1]; char *filename = argv[2]; printf("fun: %s filename: %s\n", fun, filename); printf("zlib version: %s\n", zlibversion()); if (!strcmp(fun, "gzdopen")) { int fd = open(filename, o_rdonly); printf("open returned %d\n", fd); gin = gzdopen(fd, "rb"); } if (!strcmp(fun, "gzopen")) gin = gzopen(filename, "rb"); printf("gzopen returned %p\n", gin); len = gzread(gin, buffer, sizeof(buffer)); fprintf(stderr, "gzread() returned %d\n", len); errmsg = gzerror(gin, &errnum); fprintf(stderr, "gzerror() returned '%s'; errnum=%d\n", errmsg, errnum); return 0; } and here's did:
c:\decompress> cl test.c /iinclude lib/zdll.lib microsoft (r) 32-bit c/c++ optimizing compiler version 12.00.8804 80x86 copyright (c) microsoft corp 1984-1998. rights reserved. test.c microsoft (r) incremental linker version 6.00.8447 copyright (c) microsoft corp 1992-1998. rights reserved. c:\decompress> gzip -c < test.c > test.c.gz c:\decompress>test gzdopen test.c.gz fun: gzdopen filename: test.c.gz zlib version: 1.2.8 open returned 3 gzopen returned 00332ce0 gzread() returned -1 gzerror() returned '<fd:3>: bad file descriptor'; errnum=-1 c:\decompress>test gzopen test.c.gz fun: gzopen filename: test.c.gz zlib version: 1.2.8 gzopen returned 00332cc0 gzread() returned 500 gzerror() returned ''; errnum=0
Comments
Post a Comment