# HG changeset patch # User masneyb # Date 1067826918 0 # Node ID 95bcb77d62c14f7b0fa2834e5c1d016cb9381556 # Parent 3b9d5797050feff5c86e4823766e4efaee6f4aaa 2003-11-2 Brian Masney * lib/rfc2068.c (rfc2068_get_file) - if there is any data in the current read buffer, grab that data first. Otherwise, read from the socket. diff -r 3b9d5797050f -r 95bcb77d62c1 ChangeLog --- a/ChangeLog Mon Nov 03 02:14:05 2003 +0000 +++ b/ChangeLog Mon Nov 03 02:35:18 2003 +0000 @@ -1,4 +1,7 @@ 2003-11-2 Brian Masney + * lib/rfc2068.c (rfc2068_get_file) - if there is any data in the current + read buffer, grab that data first. Otherwise, read from the socket. + * lib/rfc2068.c (rfc2068_chunked_read) - more improvements to this function so that it will parse more chunked file transfers correctly. @@ -1672,7 +1675,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.164 2003/11/03 02:11:16 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.165 2003/11/03 02:35:18 masneyb Exp $ tags * debian/* - updated files from Debian maintainer diff -r 3b9d5797050f -r 95bcb77d62c1 lib/rfc2068.c --- a/lib/rfc2068.c Mon Nov 03 02:14:05 2003 +0000 +++ b/lib/rfc2068.c Mon Nov 03 02:35:18 2003 +0000 @@ -354,11 +354,23 @@ g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); params = request->protocol_data; + if (params->rbuf != NULL && params->rbuf->curpos != NULL) + { + len = params->rbuf->cur_bufsize > size ? size : params->rbuf->cur_bufsize; + memcpy (buf, params->rbuf->curpos, len); - if ((len = request->read_function (request, buf, size, request->datafd)) < 0) - return ((ssize_t) len); + if (len == params->rbuf->cur_bufsize) + gftp_free_getline_buffer (¶ms->rbuf); + else + { + params->rbuf->curpos += len; + params->rbuf->cur_bufsize -= len; + } - return (len); + return (len); + } + + return (request->read_function (request, buf, size, request->datafd)); }