isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit c9b8cefc298d97ecba67def56a375c91485cd92f
parent ef70bd4a40def77aedf73b93368d0cc8b43871af
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sat, 14 Feb 2015 13:30:14 +0100

handle clean shutdown of zlib stream

the server can actually close the zlib stream before closing the socket,
so we need to accept it.

we don't do anything beyond that - the actual EOF will be signaled by
the socket, and if the server (erroneously) sends more data, zlib will
tell us about it.

REFMAIL: 1423048708-975-1-git-send-email-alex.bennee@linaro.org

Diffstat:
Msrc/socket.c | 5+++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/socket.c b/src/socket.c @@ -597,7 +597,7 @@ static void socket_fill_z( conn_t *sock ) { char *buf; - int len; + int len, ret; if (prepare_read( sock, &buf, &len ) < 0) return; @@ -605,7 +605,8 @@ socket_fill_z( conn_t *sock ) sock->in_z->avail_out = len; sock->in_z->next_out = (unsigned char *)buf; - if (inflate( sock->in_z, Z_SYNC_FLUSH ) != Z_OK) { + ret = inflate( sock->in_z, Z_SYNC_FLUSH ); + if (ret != Z_OK && ret != Z_STREAM_END) { error( "Error decompressing data from %s: %s\n", sock->name, sock->in_z->msg ); socket_fail( sock ); return;