]> git.ipfire.org Git - people/ms/network.git/commitdiff
networkctl: Add some help and version arguments
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Mar 2023 16:13:11 +0000 (16:13 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Mar 2023 16:13:11 +0000 (16:13 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/networkctl/main.c

index 6ecaeb6aa569dd4220b5db1f03bf84b5302def23..494fd7d6303881711021a8cefcafa45dd9987061 100644 (file)
 #                                                                             #
 #############################################################################*/
 
+#include <errno.h>
+#include <getopt.h>
 #include <stdio.h>
+#include <unistd.h>
 
 #include <systemd/sd-bus.h>
 
-int main(int argc, char** argv) {
+static int version(void) {
+       printf("networkctl %s\n", PACKAGE_VERSION);
+
+       return 0;
+}
+
+static int help(void) {
+       printf(
+               "%s [OPTIONS...] COMMAND\n\n"
+               "Options:\n"
+               "  -h --help          Show help\n"
+               "     --version       Show version\n",
+               program_invocation_short_name
+       );
+
+       return 0;
+}
+
+static int parse_argv(int argc, char* argv[]) {
+       enum {
+               ARG_VERSION,
+       };
+
+       static const struct option options[] = {
+               { "help",    no_argument, NULL, 'h' },
+               { "version", no_argument, NULL, ARG_VERSION },
+               { NULL },
+       };
+       int c;
+
+       for (;;) {
+               c = getopt_long(argc, argv, "h", options, NULL);
+               if (c < 0)
+                       break;
+
+               switch (c) {
+                       case 'h':
+                               return help();
+
+                       case ARG_VERSION:
+                               return version();
+
+                       case '?':
+                               return -EINVAL;
+
+                       default:
+                               break;
+               }
+       }
+
+       return 0;
+}
+
+int main(int argc, char* argv[]) {
        sd_bus* bus = NULL;
        int r;
 
+       // Parse command line arguments
+       r = parse_argv(argc, argv);
+       if (r)
+               goto ERROR;
+
        // Connect to system bus
        r = sd_bus_open_system(&bus);
        if (r < 0) {