aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/head/head.c
diff options
context:
space:
mode:
authorAlfred Perlstein <alfred@FreeBSD.org>2001-11-02 09:27:16 +0000
committerAlfred Perlstein <alfred@FreeBSD.org>2001-11-02 09:27:16 +0000
commitc7a2aa5dfc53161365373f05e3304faae6c8ff20 (patch)
tree3a77da26454582e493608fc063fa8d1679d9e2b2 /usr.bin/head/head.c
parentbfd1f63d44ee8b007fd5e1c36d8f63e103ebd592 (diff)
downloadsrc-c7a2aa5dfc53161365373f05e3304faae6c8ff20.tar.gz
src-c7a2aa5dfc53161365373f05e3304faae6c8ff20.zip
In order to perform faster when doing "head -n", use a pair of
fgetln/fwrite instead of getc/putchar, this seems about five times faster.
Notes
Notes: svn path=/head/; revision=85861
Diffstat (limited to 'usr.bin/head/head.c')
-rw-r--r--usr.bin/head/head.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/usr.bin/head/head.c b/usr.bin/head/head.c
index d262a95fbec5..6af287c1d38f 100644
--- a/usr.bin/head/head.c
+++ b/usr.bin/head/head.c
@@ -130,14 +130,15 @@ head(fp, cnt)
FILE *fp;
register int cnt;
{
- register int ch;
+ char *cp;
+ int error, readlen;
- while (cnt && (ch = getc(fp)) != EOF) {
- if (putchar(ch) == EOF)
- err(1, "stdout");
- if (ch == '\n')
- cnt--;
- }
+ while (cnt && (cp = fgetln(fp, &readlen)) != NULL) {
+ error = fwrite(cp, sizeof(char), readlen, stdout);
+ if (error != readlen)
+ err(1, "stdout");
+ cnt--;
+ }
}
void