sbase

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

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:
Myes.1 | 6+++---
Myes.c | 13+++++--------
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); }