commit 4f1d0df755e6eb85630380c3e77f0584eedf0627
parent 39f92650d33d038be5c5429e37d2d0c624b6ab38
Author: Michael Forney <mforney@mforney.org>
Date: Thu, 31 Oct 2019 18:07:58 -0700
yes: Simplify, only support one argument
The previous code was too difficult to decipher for such a simple tool.
Since yes(1) is not specified in any standard and several well-known
implementations only support a single argument, do the same here.
Thanks to everyone who offered implementation suggestions in the
hackers@suckless.org email thread.
Diffstat:
2 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/yes.1 b/yes.1
@@ -3,12 +3,12 @@
.Os sbase
.Sh NAME
.Nm yes
-.Nd output strings repeatedly
+.Nd output string repeatedly
.Sh SYNOPSIS
.Nm
-.Op Ar string ...
+.Op Ar string
.Sh DESCRIPTION
.Nm
-will repeatedly write 'y' or a line with each
+will repeatedly write 'y' or
.Ar string
to stdout.
diff --git a/yes.c b/yes.c
@@ -6,23 +6,20 @@
static void
usage(void)
{
- eprintf("usage: %s [string ...]\n", argv0);
+ eprintf("usage: %s [string]\n", argv0);
}
int
main(int argc, char *argv[])
{
- char **p;
+ const char *s;
ARGBEGIN {
default:
usage();
} ARGEND
- for (p = argv; ; p = (*p && *(p + 1)) ? p + 1 : argv) {
- fputs(*p ? *p : "y", stdout);
- putchar((!*p || !*(p + 1)) ? '\n' : ' ');
- }
-
- return 1; /* not reached */
+ s = argc ? argv[0] : "y";
+ for (;;)
+ puts(s);
}