#include #include #include #define DEFAULT_BRANCH_NAME "master" static inline void init(int argc, char *argv[]); struct command { char *name; void (*func)(int argc, char *argv[]); }; struct command cmd[] = { {"init", init}, {NULL, NULL} }; int main(int argc, char *argv[]) { uint8_t i; if (argc < 2) { fprintf(stderr, "Usage: %s []\n", argv[0]); return 1; } for (i = 0; cmd[i].name != NULL; i++) { if (strcmp(argv[1], cmd[i].name) == 0) { cmd[i].func(argc - 1, argv + 1); return 0; } } return 0; } void init(int argc, char *argv[]) { int opt; char *branch; optind = 1; branch = DEFAULT_BRANCH_NAME; while ((opt = getopt(argc, argv, "b:")) != -1) { switch (opt) { case 'b': branch = optarg; break; default: return; } } printf("Initialized repository, branch: %s\n", branch); }