all: add format strings

This commit is contained in:
2018-12-20 10:55:42 +01:00
parent d0469fd04b
commit 0b2774533f
2 changed files with 36 additions and 12 deletions

View File

@@ -14,12 +14,14 @@ If you still want to, `make install` will install this utility to
## Usage ## Usage
``` ```
Usage: bin/n [options] Usage: n [options]
Options: Options:
-h HOST, --host=HOST NTP server to use -h HOST, --host=HOST NTP server to use
defaults to 'europe.pool.ntp.org' defaults to 'europe.pool.ntp.org'
-p PORT, --port=PORT NTP server port to use (must be numerical) -p PORT, --port=PORT NTP server port to use (must be numerical)
defaults to '123' defaults to '123'
-f FORMAT, --format=FORMAT Date format string (passed to strftime)
defaults to standard of ctime
--help Display this message and exit --help Display this message and exit
``` ```

30
main.c
View File

@@ -45,22 +45,36 @@ typedef struct {
typedef struct { typedef struct {
const char* host; const char* host;
int port; int port;
const char* format;
} ntp_info; } ntp_info;
ntp_info NDEFAULT = {.host="europe.pool.ntp.org", .port = 123}; ntp_info NDEFAULT = {.host="europe.pool.ntp.org", .port = 123, .format = NULL};
void err(char* msg) { char* nstrftime(const char* fmt, const struct tm* t) {
int size = 40;
char* res = malloc(size);
int n;
do {
n = strftime(res, size-1, fmt, t);
size *= 2;
} while (!n);
return res;
}
void err(const char* msg) {
fprintf(stderr, "Error %s.\n", msg); fprintf(stderr, "Error %s.\n", msg);
exit(1); exit(1);
} }
void usage(char* program, int code) { void usage(const char* program, int code) {
fprintf(stderr, "Usage: %s [options]\n", program); fprintf(stderr, "Usage: %s [options]\n", program);
fputs("Options:\n", stderr); fputs("Options:\n", stderr);
fputs(" -h HOST, --host=HOST NTP server to use\n", stderr); fputs(" -h HOST, --host=HOST NTP server to use\n", stderr);
fputs(" defaults to 'europe.pool.ntp.org'\n", stderr); fputs(" defaults to 'europe.pool.ntp.org'\n", stderr);
fputs(" -p PORT, --port=PORT NTP server port to use (must be numerical)\n", stderr); fputs(" -p PORT, --port=PORT NTP server port to use (must be numerical)\n", stderr);
fputs(" defaults to '123'\n", stderr); fputs(" defaults to '123'\n", stderr);
fputs(" -f FORMAT, --format=FORMAT Date format string (passed to strftime)\n", stderr);
fputs(" defaults to standard of ctime\n", stderr);
fputs(" --help Display this message and exit\n", stderr); fputs(" --help Display this message and exit\n", stderr);
exit(code); exit(code);
} }
@@ -71,12 +85,14 @@ ntp_info args(int argc, char** argv) {
static struct option long_options[] = { static struct option long_options[] = {
{"host", required_argument, 0, 'h'}, {"host", required_argument, 0, 'h'},
{"port", required_argument, 0, 'p'}, {"port", required_argument, 0, 'p'},
{"format", required_argument, 0, 'f'},
{"help", no_argument, 0, 'u'}, {"help", no_argument, 0, 'u'},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
while ((c = getopt_long(argc, argv, "t:a:", long_options, 0)) != -1) { while ((c = getopt_long(argc, argv, "t:a:f:", long_options, 0)) != -1) {
switch (c) { switch (c) {
case 'h': res.host = optarg; break; case 'h': res.host = optarg; break;
case 'f': res.format = optarg; break;
case 'p': { case 'p': {
char* end; char* end;
res.port = strtol(optarg, &end, 10); res.port = strtol(optarg, &end, 10);
@@ -123,7 +139,13 @@ int main(int argc, char** argv) {
time_t tm = n.ttms - EPOCH; time_t tm = n.ttms - EPOCH;
if (!i.format) {
fputs(ctime(&tm), stdout); fputs(ctime(&tm), stdout);
} else {
char* fmt = nstrftime(i.format, localtime(&tm));
puts(fmt);
free(fmt);
}
return 0; return 0;
} }