2001-12-14 Marcus Brinkmann <marcus@g10code.de>

* assuan-buffer.c (_assuan_read_line): New variable ATTICLEN, use
	it to save the number of bytes left over after the complete line.
	Rediddle the code a bit to make it more clear what happens.
This commit is contained in:
Marcus Brinkmann 2001-12-14 01:22:00 +00:00
parent 0913218bcc
commit c6cf950f9e
2 changed files with 22 additions and 12 deletions

View File

@ -1,3 +1,9 @@
2001-12-14 Marcus Brinkmann <marcus@g10code.de>
* assuan-buffer.c (_assuan_read_line): New variable ATTICLEN, use
it to save the number of bytes left over after the complete line.
Rediddle the code a bit to make it more clear what happens.
2001-12-14 Marcus Brinkmann <marcus@g10code.de> 2001-12-14 Marcus Brinkmann <marcus@g10code.de>
* assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH. * assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH.

View File

@ -89,27 +89,30 @@ int
_assuan_read_line (ASSUAN_CONTEXT ctx) _assuan_read_line (ASSUAN_CONTEXT ctx)
{ {
char *line = ctx->inbound.line; char *line = ctx->inbound.line;
int n, nread; int n, nread, atticlen;
int rc; int rc;
if (ctx->inbound.eof) if (ctx->inbound.eof)
return -1; return -1;
if (ctx->inbound.attic.linelen) atticlen = ctx->inbound.attic.linelen;
if (atticlen)
{ {
memcpy (line, ctx->inbound.attic.line, ctx->inbound.attic.linelen); memcpy (line, ctx->inbound.attic.line, atticlen);
nread = ctx->inbound.attic.linelen;
ctx->inbound.attic.linelen = 0; ctx->inbound.attic.linelen = 0;
for (n=0; n < nread && line[n] != '\n'; n++) for (n=0; n < atticlen && line[n] != '\n'; n++)
; ;
if (n < nread) if (n < atticlen)
rc = 0; /* found another line in the attic */ {
rc = 0; /* found another line in the attic */
nread = atticlen;
atticlen = 0;
}
else else
{ /* read the rest */ { /* read the rest */
n = nread; assert (atticlen < LINELENGTH);
assert (n < LINELENGTH); rc = readline (ctx->inbound.fd, line + atticlen,
rc = readline (ctx->inbound.fd, line + n, LINELENGTH - n, LINELENGTH - atticlen, &nread, &ctx->inbound.eof);
&nread, &ctx->inbound.eof);
} }
} }
else else
@ -124,6 +127,7 @@ _assuan_read_line (ASSUAN_CONTEXT ctx)
} }
ctx->inbound.attic.pending = 0; ctx->inbound.attic.pending = 0;
nread += atticlen;
for (n=0; n < nread; n++) for (n=0; n < nread; n++)
{ {
if (line[n] == '\n') if (line[n] == '\n')