From 4f1d0df755e6eb85630380c3e77f0584eedf0627 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Thu, 31 Oct 2019 18:07:58 -0700 Subject: [PATCH] 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. --- yes.1 | 6 +++--- yes.c | 13 +++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/yes.1 b/yes.1 index 87e390a..f3803ad 100644 --- 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 index ffc77f0..b5c3c10 100644 --- 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); }