summaryrefslogtreecommitdiffstats
path: root/usr.bin/paste
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2002-05-24 08:56:49 +0000
committertjr <tjr@FreeBSD.org>2002-05-24 08:56:49 +0000
commit4b1ea82b13bbf533ac3e19fdee9e171eb17574fe (patch)
tree5808a5287f511868e68a797eb4f52cd483218097 /usr.bin/paste
parent67cc400f56ba5291d16f74b024a79c1999ad4112 (diff)
downloadFreeBSD-src-4b1ea82b13bbf533ac3e19fdee9e171eb17574fe.zip
FreeBSD-src-4b1ea82b13bbf533ac3e19fdee9e171eb17574fe.tar.gz
Use fgetln(3) to handle lines of unlimited length instead of a
getc/putc loop. Suggested by: dd
Diffstat (limited to 'usr.bin/paste')
-rw-r--r--usr.bin/paste/paste.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/usr.bin/paste/paste.c b/usr.bin/paste/paste.c
index de05648..52a6458 100644
--- a/usr.bin/paste/paste.c
+++ b/usr.bin/paste/paste.c
@@ -115,10 +115,11 @@ int
parallel(char **argv)
{
LIST *lp;
- int cnt, ich;
- char ch, *p;
+ int cnt;
+ char ch, *buf, *p;
LIST *head, *tmp;
int opencnt, output;
+ size_t len;
for (cnt = 0, head = NULL; (p = *argv); ++argv, ++cnt) {
if ((lp = malloc(sizeof(LIST))) == NULL)
@@ -146,7 +147,7 @@ parallel(char **argv)
putchar(ch);
continue;
}
- if ((ich = getc(lp->fp)) == EOF) {
+ if ((buf = fgetln(lp->fp, &len)) == NULL) {
if (!--opencnt)
break;
lp->fp = NULL;
@@ -166,11 +167,9 @@ parallel(char **argv)
putchar(ch);
} else if ((ch = delim[(lp->cnt - 1) % delimcnt]))
putchar(ch);
- if (ich == '\n')
- continue;
- do {
- putchar(ich);
- } while ((ich = getc(lp->fp)) != EOF && ich != '\n');
+ if (buf[len - 1] == '\n')
+ len--;
+ fwrite(buf, 1, len, stdout);
}
if (output)
putchar('\n');
@@ -183,8 +182,9 @@ int
sequential(char **argv)
{
FILE *fp;
- int ch, cnt, failed, needdelim;
- char *p;
+ int cnt, failed, needdelim;
+ char *buf, *p;
+ size_t len;
failed = 0;
for (; (p = *argv); ++argv) {
@@ -196,7 +196,7 @@ sequential(char **argv)
continue;
}
cnt = needdelim = 0;
- while ((ch = getc(fp)) != EOF) {
+ while ((buf = fgetln(fp, &len)) != NULL) {
if (needdelim) {
needdelim = 0;
if (delim[cnt] != '\0')
@@ -204,10 +204,10 @@ sequential(char **argv)
if (++cnt == delimcnt)
cnt = 0;
}
- if (ch != '\n')
- putchar(ch);
- else
- needdelim = 1;
+ if (buf[len - 1] == '\n')
+ len--;
+ fwrite(buf, 1, len, stdout);
+ needdelim = 1;
}
if (needdelim)
putchar('\n');
OpenPOWER on IntegriCloud