blob: c232e115392c40732dded0832368d1859b760828 [file] [log] [blame]
Erik Andersene49d5ec2000-02-08 19:58:47 +00001/* vi: set sw=4 ts=4: */
John Beppu3157b1f1999-12-10 07:42:50 +00002/*
3 * Mini head implementation for busybox
4 *
5 *
Erik Andersen61677fe2000-04-13 01:18:56 +00006 * Copyright (C) 1999,2000 by Lineo, inc.
Eric Andersencf536871999-12-10 08:29:20 +00007 * Written by John Beppu <beppu@lineo.com>
John Beppu3157b1f1999-12-10 07:42:50 +00008 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 *
23 */
24
Eric Andersen3570a342000-09-25 21:45:58 +000025#include "busybox.h"
John Beppu3157b1f1999-12-10 07:42:50 +000026#include <errno.h>
27#include <stdio.h>
28
Erik Andersene49d5ec2000-02-08 19:58:47 +000029int head(int len, FILE * src)
John Beppu3157b1f1999-12-10 07:42:50 +000030{
Erik Andersene49d5ec2000-02-08 19:58:47 +000031 int i;
32 char buffer[1024];
John Beppu3157b1f1999-12-10 07:42:50 +000033
Erik Andersene49d5ec2000-02-08 19:58:47 +000034 for (i = 0; i < len; i++) {
35 fgets(buffer, 1024, src);
36 if (feof(src)) {
37 break;
38 }
39 fputs(buffer, stdout);
40 }
41 return 0;
John Beppu3157b1f1999-12-10 07:42:50 +000042}
43
44/* BusyBoxed head(1) */
Erik Andersene49d5ec2000-02-08 19:58:47 +000045int head_main(int argc, char **argv)
John Beppu3157b1f1999-12-10 07:42:50 +000046{
Erik Andersene49d5ec2000-02-08 19:58:47 +000047 char opt;
48 int len = 10, tmplen, i;
John Beppu3157b1f1999-12-10 07:42:50 +000049
Erik Andersene49d5ec2000-02-08 19:58:47 +000050 /* parse argv[] */
51 for (i = 1; i < argc; i++) {
52 if (argv[i][0] == '-') {
53 opt = argv[i][1];
54 switch (opt) {
55 case 'n':
56 tmplen = 0;
57 if (++i < argc)
58 tmplen = atoi(argv[i]);
59 if (tmplen < 1)
60 usage(head_usage);
61 len = tmplen;
62 break;
63 case '-':
64 case 'h':
65 usage(head_usage);
66 default:
Matt Kraaid537a952000-07-14 01:51:25 +000067 errorMsg("invalid option -- %c\n", opt);
Erik Andersene49d5ec2000-02-08 19:58:47 +000068 usage(head_usage);
69 }
70 } else {
71 break;
72 }
73 }
74
75 /* get rest of argv[] or stdin if nothing's left */
76 if (i >= argc) {
77 head(len, stdin);
78
John Beppu3157b1f1999-12-10 07:42:50 +000079 } else {
Erik Andersene49d5ec2000-02-08 19:58:47 +000080 int need_headers = ((argc - i) > 1);
John Beppu3157b1f1999-12-10 07:42:50 +000081
Erik Andersene49d5ec2000-02-08 19:58:47 +000082 for (; i < argc; i++) {
83 FILE *src;
John Beppu3157b1f1999-12-10 07:42:50 +000084
Erik Andersene49d5ec2000-02-08 19:58:47 +000085 src = fopen(argv[i], "r");
86 if (!src) {
Matt Kraaid537a952000-07-14 01:51:25 +000087 errorMsg("%s: %s\n", argv[i], strerror(errno));
Erik Andersene49d5ec2000-02-08 19:58:47 +000088 } else {
89 /* emulating GNU behaviour */
90 if (need_headers) {
91 fprintf(stdout, "==> %s <==\n", argv[i]);
92 }
93 head(len, src);
94 if (i < argc - 1) {
95 fprintf(stdout, "\n");
96 }
97 }
John Beppu3157b1f1999-12-10 07:42:50 +000098 }
John Beppu3157b1f1999-12-10 07:42:50 +000099 }
Eric Andersenb6106152000-06-19 17:25:40 +0000100 return(0);
John Beppu3157b1f1999-12-10 07:42:50 +0000101}
102
Eric Andersen3570a342000-09-25 21:45:58 +0000103/* $Id: head.c,v 1.14 2000/09/25 21:45:57 andersen Exp $ */