Changes in libcfa/src/parseargs.cfa [6f94958:772b300]
- File:
-
- 1 edited
-
libcfa/src/parseargs.cfa (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/parseargs.cfa
r6f94958 r772b300 30 30 31 31 static void usage(char * cmd, cfa_option options[], size_t opt_count, const char * usage, FILE * out) __attribute__ ((noreturn)); 32 //----------------------------------------------------------------------------- 33 // checking 34 static void check_args(cfa_option options[], size_t opt_count) { 35 for(i; opt_count) { 36 for(j; opt_count) { 37 if(i == j) continue; 38 39 if( options[i].short_name != '\0' 40 && options[i].short_name == options[j].short_name) 41 abort("Parse Args error: two options have short name '%c' (%zu & %zu)", options[i].short_name, i, j); 42 43 if(0 == strcmp(options[i].long_name, options[j].long_name)) abort("Parse Args error: two options have long name '%s' (%zu & %zu)", options[i].long_name, i, j); 44 } 45 } 46 } 47 48 49 //----------------------------------------------------------------------------- 50 // Parsing args 32 51 33 void parse_args( cfa_option options[], size_t opt_count, const char * usage, char ** & left ) { 52 34 if( 0p != &cfa_args_argc ) { … … 59 41 } 60 42 43 //----------------------------------------------------------------------------- 44 // getopt_long wrapping 61 45 void parse_args( 62 46 int argc, … … 67 51 char ** & left 68 52 ) { 69 check_args(options, opt_count);70 71 int maxv = 'h';72 char optstring[opt_count * 3] = { '\0' };73 {74 int idx = 0;75 for(i; opt_count) {76 if (options[i].short_name) {77 maxv = max(options[i].short_name, maxv);78 optstring[idx] = options[i].short_name;79 idx++;80 if( ((intptr_t)options[i].parse) != ((intptr_t)parse_settrue)81 && ((intptr_t)options[i].parse) != ((intptr_t)parse_setfalse) ) {82 optstring[idx] = ':';83 idx++;84 }85 }86 }87 optstring[idx+0] = 'h';88 optstring[idx+1] = '\0';89 }90 91 53 struct option optarr[opt_count + 2]; 92 54 { … … 94 56 for(i; opt_count) { 95 57 if(options[i].long_name) { 96 options[i].val = (options[i].short_name != '\0') ? ((int)options[i].short_name) : ++maxv;97 58 optarr[idx].name = options[i].long_name; 98 59 optarr[idx].flag = 0p; 99 optarr[idx].val = options[i]. val;60 optarr[idx].val = options[i].short_name; 100 61 if( ((intptr_t)options[i].parse) == ((intptr_t)parse_settrue) 101 62 || ((intptr_t)options[i].parse) == ((intptr_t)parse_setfalse) ) { … … 109 70 optarr[idx+0].[name, has_arg, flag, val] = ["help", no_argument, 0, 'h']; 110 71 optarr[idx+1].[name, has_arg, flag, val] = [0, no_argument, 0, 0]; 72 } 73 74 char optstring[opt_count * 3] = { '\0' }; 75 { 76 int idx = 0; 77 for(i; opt_count) { 78 optstring[idx] = options[i].short_name; 79 idx++; 80 if( ((intptr_t)options[i].parse) != ((intptr_t)parse_settrue) 81 && ((intptr_t)options[i].parse) != ((intptr_t)parse_setfalse) ) { 82 optstring[idx] = ':'; 83 idx++; 84 } 85 } 86 optstring[idx+0] = 'h'; 87 optstring[idx+1] = '\0'; 111 88 } 112 89 … … 126 103 default: 127 104 for(i; opt_count) { 128 if(opt == options[i]. val) {105 if(opt == options[i].short_name) { 129 106 const char * arg = optarg ? optarg : ""; 130 107 if( arg[0] == '=' ) { arg++; } … … 148 125 if(hwidth <= 0) hwidth = max; 149 126 150 char sname[4] = { ' ', ' ', ' ', '\0' }; 151 if(sn != '\0') { 152 sname[0] = '-'; 153 sname[1] = sn; 154 sname[2] = ','; 155 } 156 157 fprintf(out, " %s --%-*s %.*s\n", sname, width, ln, hwidth, help); 127 fprintf(out, " -%c, --%-*s %.*s\n", sn, width, ln, hwidth, help); 158 128 for() { 159 129 help += min(strlen(help), hwidth);
Note:
See TracChangeset
for help on using the changeset viewer.