sfinx

sphincs+ inspired signing utility
git clone git://git.finwo.net/app/sfinx
Log | Files | Refs | README

main.c (776B)


      1 #include <libgen.h>
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 
      5 #include "cli/registry.h"
      6 
      7 int main(int argc, char *argv[]) {
      8   const char *prog = basename(argv[0]);
      9 
     10   cli_main_fn fn = cli_find(prog);
     11   if (fn) return fn(argc, argv);
     12 
     13   // Not argv[0], see if it's given as subcommand
     14   if (argc > 1 && (fn = cli_find(argv[1]))) {
     15     char **shifted = malloc(sizeof(char *) * (size_t)argc);
     16     if (!shifted) {
     17       fprintf(stderr, "out of memory\n");
     18       return 1;
     19     }
     20     shifted[0] = argv[1];
     21     for (int i = 2; i < argc; i++) shifted[i - 1] = argv[i];
     22     int rc = fn(argc - 1, shifted);
     23     free(shifted);
     24     return rc;
     25   }
     26 
     27   fprintf(stderr, "%s: unknown command: %s\n", argv[0], prog);
     28   fprintf(stderr, "available commands: %s\n", cli_registered());
     29   return 1;
     30 }