sbase/date.c
FRIGN e50ee15a9c 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.
2015-03-02 15:12:19 +01:00

50 lines
786 B
C

/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "util.h"
static void
usage(void)
{
eprintf("usage: %s [-u] [-d time] [+format]\n", argv0);
}
int
main(int argc, char *argv[])
{
struct tm *now;
struct tm *(*tztime)(const time_t *) = localtime;
time_t t;
char buf[BUFSIZ], *fmt = "%c", *tz = "local";
t = time(NULL);
ARGBEGIN {
case 'd':
t = estrtonum(EARGF(usage()), 0, LLONG_MAX);
break;
case 'u':
tztime = gmtime;
tz = "gm";
break;
default:
usage();
} ARGEND;
if (argc) {
if (argc != 1 || argv[0][0] != '+')
usage();
else
fmt = &argv[0][1];
}
if (!(now = tztime(&t)))
eprintf("%stime failed\n", tz);
strftime(buf, sizeof(buf), fmt, now);
puts(buf);
return 0;
}