From e50ee15a9caa8c5c8eab2b09dbe7acfdacb2c03f Mon Sep 17 00:00:00 2001 From: FRIGN Date: Mon, 2 Mar 2015 15:12:19 +0100 Subject: [PATCH] Audit date(1) 1) Update usage as already done in the manpage 2) group and sort local variable declarations 3) Be pedantic about the number of options. Don't just ignore it if argc > 1. --- README | 2 +- date.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/README b/README index 136a2b7..ce1e072 100644 --- a/README +++ b/README @@ -23,7 +23,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, = cp yes none (-i) =* cron non-posix none #* cut yes none -=* date yes -u +=*| date yes none =*| dirname yes none =* du yes none =*| echo yes none diff --git a/date.c b/date.c index fb7e8e5..a3cd313 100644 --- a/date.c +++ b/date.c @@ -8,20 +8,19 @@ static void usage(void) { - eprintf("usage: %s [-u] [-d format] [+FORMAT]\n", argv0); + eprintf("usage: %s [-u] [-d time] [+format]\n", argv0); } int main(int argc, char *argv[]) { - char buf[BUFSIZ]; - char *fmt = "%c"; - struct tm *now = NULL; + struct tm *now; struct tm *(*tztime)(const time_t *) = localtime; - const char *tz = "local"; time_t t; + char buf[BUFSIZ], *fmt = "%c", *tz = "local"; t = time(NULL); + ARGBEGIN { case 'd': t = estrtonum(EARGF(usage()), 0, LLONG_MAX); @@ -34,8 +33,12 @@ main(int argc, char *argv[]) usage(); } ARGEND; - if (argc > 0 && argv[0][0] == '+') - fmt = &argv[0][1]; + if (argc) { + if (argc != 1 || argv[0][0] != '+') + usage(); + else + fmt = &argv[0][1]; + } if (!(now = tztime(&t))) eprintf("%stime failed\n", tz);