sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

commit ea0d16e928c8b48adcb04451fc2cb63312be7b73
parent fa18379a055ab2778081d1942489b11bd4df1ee9
Author: sin <sin@2f30.org>
Date:   Tue,  1 Mar 2016 15:23:23 +0000

Revert "fix length after '\' getline string termination"

Caused a regression in sed, revert until we investigate further.

Diffstat:
Mcut.c | 4++--
Mhead.c | 2+-
Msed.c | 4++--
Mtail.c | 2+-
Muudecode.c | 4++--
5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/cut.c b/cut.c @@ -115,8 +115,8 @@ cut(FILE *fp, const char *fname) Range *r; while ((len = getline(&buf, &size, fp)) > 0) { - if (buf[len - 1] == '\n') - buf[--len] = '\0'; + if (len && buf[len - 1] == '\n') + buf[len - 1] = '\0'; if (mode == 'f' && !utfutf(buf, delim)) { if (!sflag) puts(buf); diff --git a/head.c b/head.c @@ -15,7 +15,7 @@ head(FILE *fp, const char *fname, size_t n) while (i < n && (len = getline(&buf, &size, fp)) > 0) { fputs(buf, stdout); - i += (buf[len - 1] == '\n'); + i += (len && (buf[len - 1] == '\n')); } free(buf); if (ferror(fp)) diff --git a/sed.c b/sed.c @@ -441,8 +441,8 @@ read_line(FILE *f, String *s) eprintf("getline:"); return EOF; } - if (s->str[len] == '\n') - s->str[--len] = '\0'; + if (s->str[--len] == '\n') + s->str[len] = '\0'; return 0; } diff --git a/tail.c b/tail.c @@ -23,7 +23,7 @@ dropinit(FILE *fp, const char *str, size_t n) if (mode == 'n') { while (i < n && (len = getline(&buf, &size, fp)) > 0) - if (buf[len - 1] == '\n') + if (len > 0 && buf[len - 1] == '\n') i++; } else { while (i < n && (len = efgetrune(&r, fp, str))) diff --git a/uudecode.c b/uudecode.c @@ -169,9 +169,9 @@ uudecode(FILE *fp, FILE *outfp) while ((len = getline(&bufb, &n, fp)) > 0) { p = bufb; /* trim newlines */ - if (bufb[len - 1] != '\n') + if (!len || bufb[len - 1] != '\n') eprintf("no newline found, aborting\n"); - bufb[--len] = '\0'; + bufb[len - 1] = '\0'; /* check for last line */ if ((i = DEC(*p)) <= 0)