aboutsummaryrefslogtreecommitdiff
path: root/src/cli.c
blob: b1849ece1064dc6a57f9b2bd6e20a90cceec28af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "cli.h"

#include <errno.h>
#include <getopt.h>
#include <stdbool.h>
#include <stdio.h>

cli_arguments cli_parse_arguments(const char *const argv[], const int argc) {
    errno = 0;
    cli_arguments args = {
        .is_debug_mode = false,
    };

    int opt = -1;
    opterr = 0;  // Suppress getopt's built-in invalid opt message
    while ((opt = getopt(argc, (char *const *)argv, "dh")) != -1) {
        switch (opt) {
            case 'd':
                args.is_debug_mode = true;
                break;
            case '?':
                (void)fprintf(stderr, "error: unknown option `-%c'\n", optopt);
                // fall through
            case 'h':
                // fall through
            default:
                (void)fprintf(stderr, "usage: %s [-d]\n", BINARY);
                errno = 1;
        }
    }

    return args;
}