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 }