• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 int main(int, char **);
6 
toolbox_main(int argc,char ** argv)7 static int toolbox_main(int argc, char **argv)
8 {
9     // "toolbox foo ..." is equivalent to "foo ..."
10     if (argc > 1) {
11         return main(argc - 1, argv + 1);
12     } else {
13         printf("Toolbox!\n");
14         return 0;
15     }
16 }
17 
18 #define TOOL(name) int name##_main(int, char**);
19 #include "tools.h"
20 #undef TOOL
21 
22 static struct
23 {
24     const char *name;
25     int (*func)(int, char**);
26 } tools[] = {
27     { "toolbox", toolbox_main },
28 #define TOOL(name) { #name, name##_main },
29 #include "tools.h"
30 #undef TOOL
31     { 0, 0 },
32 };
33 
main(int argc,char ** argv)34 int main(int argc, char **argv)
35 {
36     int i;
37     char *name = argv[0];
38 
39     if((argc > 1) && (argv[1][0] == '@')) {
40         name = argv[1] + 1;
41         argc--;
42         argv++;
43     } else {
44         char *cmd = strrchr(argv[0], '/');
45         if (cmd)
46             name = cmd + 1;
47     }
48 
49     for(i = 0; tools[i].name; i++){
50         if(!strcmp(tools[i].name, name)){
51             return tools[i].func(argc, argv);
52         }
53     }
54 
55     printf("%s: no such tool\n", argv[0]);
56     return -1;
57 }
58