]> git.ipfire.org Git - zone-sync.git/commitdiff
main: Add a very basic command line parser
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 10 May 2026 11:34:57 +0000 (11:34 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 10 May 2026 11:34:57 +0000 (11:34 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
configure.ac
main.c

index 653dc6bdcca815ec644e63c770df6beb7c8b9f12..1e55ca62ede1ddd5d5cc1b1da6ff185d4826c799 100644 (file)
@@ -122,7 +122,10 @@ AC_TYPE_SSIZE_T
 AC_TYPE_UID_T
 AC_TYPE_UINT64_T
 
-AC_CHECK_HEADERS([])
+AC_CHECK_HEADERS([ \
+       argp.h \
+       syslog.h \
+])
 
 AC_CHECK_FUNCS([])
 
diff --git a/main.c b/main.c
index f3c7629b32c3f765c17b0a28cafe313cd79591f9..c8c900f32c8ba2802e9ac46a4b6bc188c051c9c8 100644 (file)
--- a/main.c
+++ b/main.c
 #                                                                             #
 #############################################################################*/
 
+#include <argp.h>
+#include <syslog.h>
+
+typedef struct ctx {
+       int log_level;
+} ctx_t;
+
+const char* argp_program_version = PACKAGE_VERSION;
+
+static const char* args_doc = "TODO";
+
+enum {
+       OPT_DEBUG = 1,
+};
+
+static struct argp_option options[] = {
+       { "debug", OPT_DEBUG, NULL, 0, "Run in debug mode", 0 },
+       { NULL },
+};
+
+static error_t parse(int key, char* arg, struct argp_state* state) {
+       ctx_t* ctx = state->input;
+
+       switch (key) {
+               case OPT_DEBUG:
+                       ctx->log_level = LOG_DEBUG;
+                       break;
+
+               // Ignore these
+               case ARGP_KEY_END:
+               case ARGP_KEY_ERROR:
+               case ARGP_KEY_INIT:
+               case ARGP_KEY_FINI:
+                       break;
+
+               default:
+                       return ARGP_ERR_UNKNOWN;
+       }
+
+       return 0;
+}
+
 int main(int argc, char* argv[]) {
+       int r;
+
+       // Create the context
+       ctx_t ctx = {};
+
+       // Setup the command line parser
+       struct argp parser = {
+               .options   = options,
+               .parser    = parse,
+               .args_doc  = args_doc,
+       };
+       int arg_index = 0;
+
+       // Parse the command line
+       r = argp_parse(&parser, argc, argv, ARGP_IN_ORDER, &arg_index, &ctx);
+       if (r)
+               return r;
+
        return 0;
 }