From c6cf950f9e05d3b37faf8606ea6105ddb17486a7 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Fri, 14 Dec 2001 01:22:00 +0000 Subject: [PATCH] 2001-12-14 Marcus Brinkmann * 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. --- assuan/ChangeLog | 6 ++++++ assuan/assuan-buffer.c | 28 ++++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/assuan/ChangeLog b/assuan/ChangeLog index 61563b0f..57e503f2 100644 --- a/assuan/ChangeLog +++ b/assuan/ChangeLog @@ -1,3 +1,9 @@ +2001-12-14 Marcus Brinkmann + + * 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 * assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH. diff --git a/assuan/assuan-buffer.c b/assuan/assuan-buffer.c index ee085d0c..399d11db 100644 --- a/assuan/assuan-buffer.c +++ b/assuan/assuan-buffer.c @@ -89,27 +89,30 @@ int _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 @@ -124,6 +127,7 @@ _assuan_read_line (ASSUAN_CONTEXT ctx) } ctx->inbound.attic.pending = 0; + nread += atticlen; for (n=0; n < nread; n++) { if (line[n] == '\n')