diff --git a/README b/README index 7f923d1..1a6c9bd 100644 --- a/README +++ b/README @@ -33,7 +33,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, =* false yes none #* fold yes none =* grep yes none - head yes none +=* head yes none = hostname non-posix none =* kill yes none = link yes none diff --git a/head.1 b/head.1 index 6b26fc6..fb29278 100644 --- a/head.1 +++ b/head.1 @@ -1,18 +1,43 @@ -.TH HEAD 1 sbase\-VERSION -.SH NAME -head \- output first part of files -.SH SYNOPSIS -.B head -.RB [ \-n -.IR lines ] -.RI [ file ...] -.SH DESCRIPTION -.B head -writes the first 10 lines of each file to stdout. If no file is given, head +.Dd January 25, 2015 +.Dt HEAD 1 sbase\-VERSION +.Sh NAME +.Nm head +.Nd display initial lines of files +.Sh SYNOPSIS +.Nm head +.Op Fl n Ar num +.Op Fl N +.Op Ar file ... +.Sh DESCRIPTION +.Nm +writes +.Ar num +| +.Sy N +lines of each +.Ar file +to stdout. +If no file is given +.Nm reads from stdin. -.SH OPTIONS -.TP -.BI \-n " lines" -outputs the given number of lines. -.SH SEE ALSO -.IR tail (1) +.Sh OPTIONS +.Bl -tag -width Ds +.It Fl n Ar num | Fl N +Display +.Ar num +| +.Sy N +lines. Default is 10. +.El +.Sh SEE ALSO +.Xr tail 1 +.Sh STANDARDS +The +.Nm +utility is compliant with the +.St -p1003.1-2008 +specification. +.Pp +The +.Op Fl N +flag is an extension to that specification. diff --git a/head.c b/head.c index f4f6d67..c47fb41 100644 --- a/head.c +++ b/head.c @@ -4,15 +4,30 @@ #include #include -#include "text.h" #include "util.h" -static void head(FILE *, const char *, long); +static void +head(FILE *fp, const char *str, long n) +{ + char *buf = NULL; + size_t size = 0; + ssize_t len; + unsigned long i = 0; + + while (i < n && ((len = getline(&buf, &size, fp)) != -1)) { + fputs(buf, stdout); + if (buf[len - 1] == '\n') + i++; + } + free(buf); + if (ferror(fp)) + eprintf("%s: read error:", str); +} static void usage(void) { - eprintf("usage: %s [-n lines] [file...]\n", argv0); + eprintf("usage: %s [-n lines] [-N] [file...]\n", argv0); } int @@ -54,21 +69,3 @@ main(int argc, char *argv[]) } return ret; } - -static void -head(FILE *fp, const char *str, long n) -{ - char *buf = NULL; - size_t size = 0; - ssize_t len; - unsigned long i = 0; - - while (i < n && ((len = getline(&buf, &size, fp)) != -1)) { - fputs(buf, stdout); - if (buf[len - 1] == '\n') - i++; - } - free(buf); - if (ferror(fp)) - eprintf("%s: read error:", str); -}