aboutsummaryrefslogtreecommitdiff
path: root/toys
diff options
context:
space:
mode:
Diffstat (limited to 'toys')
-rw-r--r--toys/head.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/toys/head.c b/toys/head.c
index 8f0baa24..87fbe62a 100644
--- a/toys/head.c
+++ b/toys/head.c
@@ -6,13 +6,14 @@
*
* See http://www.opengroup.org/onlinepubs/009695399/utilities/head.html
-USE_HEAD(NEWTOY(head, "n#", TOYFLAG_BIN))
+USE_HEAD(NEWTOY(head, "n#<0=10", TOYFLAG_BIN))
config HEAD
bool "head"
default y
help
usage: head [-n number] [file...]
+
Copy first lines from files to stdout. If no files listed, copy from
stdin. Filename "-" is a synonym for stdin.
@@ -34,11 +35,11 @@ static void do_head(int fd, char *name)
if (toys.optc > 1) {
// Print an extra newline for all but the first file
- if (TT.file_no++ > 0) printf("\n");
- printf("==> %s <==\n", name);
+ if (TT.file_no++) printf("\n");
+ xprintf("==> %s <==\n", name);
}
- for (;lines>0;) {
+ while (lines) {
len = read(fd, toybuf, size);
if (len<0) {
perror_msg("%s",name);
@@ -46,17 +47,14 @@ static void do_head(int fd, char *name)
}
if (len<1) break;
- for(i=0; i<len; i++) {
- if (toybuf[i] == '\n' && --lines < 1) break;
- }
- xwrite(1, toybuf, i+1);
+ for(i=0; i<len;)
+ if (toybuf[i++] == '\n' && !--lines) break;
+
+ xwrite(1, toybuf, i);
}
}
void head_main(void)
{
- if (!toys.optflags) TT.lines = 10;
- if (TT.lines < 0) perror_exit("Invalid number of lines.");
- TT.file_no = 0;
loopfiles(toys.optargs, do_head);
}