changeset 445:2c47a9c0c619

Cleanups for head.
author Rob Landley <rob@landley.net>
date Thu, 09 Feb 2012 06:36:42 -0600
parents d3ca5e15e457
children b51faa4fe8e6
files toys/head.c
diffstat 1 files changed, 9 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/toys/head.c	Mon Feb 06 17:35:59 2012 -0800
+++ b/toys/head.c	Thu Feb 09 06:36:42 2012 -0600
@@ -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 @@
 
 	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 @@
 		}
 		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);
 }