aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2012-02-09 06:36:42 -0600
committerRob Landley <rob@landley.net>2012-02-09 06:36:42 -0600
commit0d3961f2d3cfe3eeecdd4ffb5e601b5058537570 (patch)
tree80b420ecb9918cc6f272cd8fefce6fe5c265a094
parent41a2130487e6096ec9f3cecbfc90f4c2d0169ec1 (diff)
downloadtoybox-0d3961f2d3cfe3eeecdd4ffb5e601b5058537570.tar.gz
Cleanups for head.
-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);
}