From 61200ea6fe6e6df53479148801276e18cf4e9cd7 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Tue, 7 Jan 2020 09:37:06 +1300 Subject: Refactor usage function and output --- crypt.c | 37 ++++++++++++++++++------------------- crypt.h | 3 +-- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/crypt.c b/crypt.c index 54b90ce..22f82bd 100644 --- a/crypt.c +++ b/crypt.c @@ -8,38 +8,37 @@ int main (int argc, char **argv) /* The hash we will produce, hopefully */ char *hash = NULL; - /* Assume user doesn't want help */ - int help = 0; + /* Option character */ + int opt; /* Iterate through any options */ - int o; - while ((o = getopt(argc, argv, OPTSTRING)) != -1) { - switch (o) { + while ((opt = getopt(argc, argv, "h")) != -1) { + switch (opt) { case 'h': - help = 1; + usage(stdout, EXIT_SUCCESS); break; case '?': - fprintf(stderr, "Unknown option\n"); + usage(stderr, EXIT_FAILURE); break; default: abort(); } } - /* If help was asked, give it */ - if (help) { - fprintf(stdout, "%s\n", USAGE); - exit(EXIT_SUCCESS); - } - - /* If we don't have three arguments, bail */ - if (argc != 3) { - fprintf(stderr, "%s\n", USAGE); - exit(EXIT_FAILURE); - } + /* If we don't have three arguments left now, bail */ + if (argc != 3) + usage(stderr, EXIT_FAILURE); /* All seems well, build the hash and print it */ hash = crypt(argv[1], argv[2]); - fprintf(stdout, "%s\n", hash); + puts(hash); exit(EXIT_SUCCESS); } + +/* + * Show usage to given stream, and exit with given code + */ +void usage(FILE *stream, int status) { + fputs("USAGE: crypt [-h | KEY SALT]\n", stream); + exit(status); +} diff --git a/crypt.h b/crypt.h index 2b8145d..6b2b7ca 100644 --- a/crypt.h +++ b/crypt.h @@ -4,5 +4,4 @@ #include #include -#define OPTSTRING "h" -#define USAGE "USAGE: crypt KEY SALT" +void usage(FILE *, int); -- cgit v1.2.3