sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit 741d8c9a76d103da86395c1c6a0e817d780ad4a7
parent 454fab03aaf24cffe669223da2b217b832f5bca6
Author: FRIGN <dev@frign.de>
Date:   Sun, 25 Jan 2015 22:01:26 +0100

Add mandoc-manpage for head(1) and clean up code

and mark it as finished in the README.

Diffstat:
MREADME | 2+-
Mhead.1 | 59++++++++++++++++++++++++++++++++++++++++++-----------------
Mhead.c | 39++++++++++++++++++---------------------
3 files changed, 61 insertions(+), 39 deletions(-)

diff --git 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 @@ -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 @@ -4,15 +4,30 @@ #include <string.h> #include <unistd.h> -#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); -}