+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>
* assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH.
_assuan_read_line (ASSUAN_CONTEXT ctx)
{
char *line = ctx->inbound.line;
- int n, nread;
+ int n, nread, atticlen;
int rc;
-
+
if (ctx->inbound.eof)
return -1;
- if (ctx->inbound.attic.linelen)
+ atticlen = ctx->inbound.attic.linelen;
+ if (atticlen)
{
- memcpy (line, ctx->inbound.attic.line, ctx->inbound.attic.linelen);
- nread = ctx->inbound.attic.linelen;
+ memcpy (line, ctx->inbound.attic.line, atticlen);
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)
- rc = 0; /* found another line in the attic */
+ if (n < atticlen)
+ {
+ rc = 0; /* found another line in the attic */
+ nread = atticlen;
+ atticlen = 0;
+ }
else
{ /* read the rest */
- n = nread;
- assert (n < LINELENGTH);
- rc = readline (ctx->inbound.fd, line + n, LINELENGTH - n,
- &nread, &ctx->inbound.eof);
+ assert (atticlen < LINELENGTH);
+ rc = readline (ctx->inbound.fd, line + atticlen,
+ LINELENGTH - atticlen, &nread, &ctx->inbound.eof);
}
}
else
}
ctx->inbound.attic.pending = 0;
+ nread += atticlen;
for (n=0; n < nread; n++)
{
if (line[n] == '\n')