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:
M | README | | | 2 | +- |
M | head.1 | | | 59 | ++++++++++++++++++++++++++++++++++++++++++----------------- |
M | head.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);
-}