123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include <unistd.h>
- #include <stdio.h>
- #define RUN(...) \
- { \
- optind = 1; \
- optarg = NULL; \
- opterr = 1; \
- optopt = -1; \
- char *args_arr[] = { __VA_ARGS__ }; \
- printf("result: %d\n", runner(sizeof(args_arr) / sizeof(args_arr[0]), args_arr)); \
- }
- int runner(int argc, char *argv[]) {
- int c;
- int bflg = 0, aflg = 0, errflg = 0;
- char *ifile = "";
- char *ofile = "";
- while((c = getopt(argc, argv, ":abf:o:")) != -1) {
- switch(c) {
- case 'a':
- if(bflg)
- errflg++;
- else
- aflg++;
- break;
- case 'b':
- if(aflg)
- errflg++;
- else
- bflg++;
- break;
- case 'f':
- ifile = optarg;
- break;
- case 'o':
- ofile = optarg;
- break;
- case ':':
- printf("Option -%c requires an operand\n", optopt);
- errflg++;
- break;
- case '?':
- printf("Unrecognized option: -%c\n", optopt);
- errflg++;
- }
- }
- printf("bflg: %d\n", bflg);
- printf("aflg: %d\n", aflg);
- printf("errflg: %d\n", errflg);
- printf("ifile: %s\n", ifile);
- printf("ofile: %s\n", ofile);
- if(errflg) {
- printf("Usage: info goes here\n");
- return 2;
- }
- return 0;
- }
- int main(int argc, const char *argv[]) {
- RUN("test", "-ao", "arg", "path", "path");
- RUN("test", "-a", "-o", "arg", "path", "path");
- RUN("test", "-o", "arg", "-a", "path", "path");
- RUN("test", "-a", "-o", "arg", "--", "path", "path");
- RUN("test", "-a", "-oarg", "path", "path");
- RUN("test", "-aoarg", "path", "path");
- RUN("test");
- }
|