dav/optparser.c

changeset 375
39fd327f81da
parent 364
3769ba002fd1
child 376
222997d48ae1
equal deleted inserted replaced
374:38ae05d46f9a 375:39fd327f81da
29 #include <stdio.h> 29 #include <stdio.h>
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <string.h> 31 #include <string.h>
32 32
33 #include "optparser.h" 33 #include "optparser.h"
34 #include "sopt.h"
34 35
35 void cmd_args_free(CmdArgs *args) { 36 void cmd_args_free(CmdArgs *args) {
36 if(args) { 37 if(args) {
37 ucx_map_free(args->options); 38 ucx_map_free(args->options);
38 free(args->argv); 39 free(args->argv);
53 for(int i=0;i<argc;i++) { 54 for(int i=0;i<argc;i++) {
54 char *arg = argv[i]; 55 char *arg = argv[i];
55 size_t len = strlen(arg); 56 size_t len = strlen(arg);
56 if(len > 1 && arg[0] == '-') { 57 if(len > 1 && arg[0] == '-') {
57 for(int c=1;c<len;c++) { 58 for(int c=1;c<len;c++) {
59 if (option) {
60 fprintf(stderr,
61 "Missing argument for option -%c\n\n", optchar);
62 cmd_args_free(a);
63 return NULL;
64 }
65
58 switch(arg[c]) { 66 switch(arg[c]) {
59 default: { 67 default: {
60 fprintf(stderr, "Unknown option -%c\n\n", arg[c]); 68 fprintf(stderr, "Unknown option -%c\n\n", arg[c]);
61 cmd_args_free(a); 69 cmd_args_free(a);
62 return NULL; 70 return NULL;
64 case 'v': { 72 case 'v': {
65 ucx_map_cstr_put(a->options, "verbose", NOARG); 73 ucx_map_cstr_put(a->options, "verbose", NOARG);
66 break; 74 break;
67 } 75 }
68 case 'k': { 76 case 'k': {
69 if(!option) { 77 option = "key";
70 option = "key"; 78 optchar = 'k';
71 optchar = 'k';
72 } else {
73 fprintf(
74 stderr,
75 "Missing argument for option -%c\n",
76 optchar);
77 cmd_args_free(a);
78 return NULL;
79 }
80 break; 79 break;
81 } 80 }
82 case 'p': { 81 case 'p': {
83 ucx_map_cstr_put(a->options, "plain", NOARG); 82 ucx_map_cstr_put(a->options, "plain", NOARG);
84 break; 83 break;
139 case 'K': { 138 case 'K': {
140 ucx_map_cstr_put(a->options, "keep", NOARG); 139 ucx_map_cstr_put(a->options, "keep", NOARG);
141 break; 140 break;
142 } 141 }
143 case 'o': { 142 case 'o': {
144 if(!option) { 143 option = "output";
145 option = "output"; 144 optchar = 'o';
146 optchar = 'o';
147 } else {
148 fprintf(
149 stderr,
150 "Missing argument for option -%c\n",
151 optchar);
152 cmd_args_free(a);
153 return NULL;
154 }
155 break; 145 break;
156 } 146 }
157 case 'u': { 147 case 'u': {
158 if(!option) { 148 option = "update";
159 option = "update"; 149 optchar = 'u';
160 optchar = 'u';
161 } else {
162 fprintf(
163 stderr,
164 "Missing argument for option -%c\n",
165 optchar);
166 cmd_args_free(a);
167 return NULL;
168 }
169 break; 150 break;
170 } 151 }
171 case 'n': { 152 case 'n': {
172 if(!option) { 153 option = "namespace";
173 option = "namespace"; 154 optchar = 'n';
174 optchar = 'n';
175 } else {
176 fprintf(
177 stderr,
178 "Missing argument for option -%c\n",
179 optchar);
180 cmd_args_free(a);
181 return NULL;
182 }
183 break; 155 break;
184 } 156 }
185 case 'L': { 157 case 'L': {
186 if(!option) { 158 option = "lock";
187 option = "lock"; 159 optchar = 'L';
188 optchar = 'L';
189 } else {
190 fprintf(
191 stderr,
192 "Missing argument for option -%c\n",
193 optchar);
194 cmd_args_free(a);
195 return NULL;
196 }
197 break; 160 break;
198 } 161 }
199 case 'T': { 162 case 'T': {
200 if(!option) { 163 option = "timeout";
201 option = "timeout"; 164 optchar = 'T';
202 optchar = 'T';
203 } else {
204 fprintf(
205 stderr,
206 "Missing argument for option -%c\n",
207 optchar);
208 cmd_args_free(a);
209 return NULL;
210 }
211 break; 165 break;
212 } 166 }
213 case 'F': { 167 case 'F': {
214 if(!option) { 168 option = "progressfile";
215 option = "progressfile"; 169 optchar = 'F';
216 optchar = 'F';
217 } else {
218 fprintf(
219 stderr,
220 "Missing argument for option -%c\n",
221 optchar);
222 cmd_args_free(a);
223 return NULL;
224 }
225 break; 170 break;
226 } 171 }
227 } 172 }
228 } 173 }
229 } else if(option) { 174 } else if(option) {
231 option = NULL; 176 option = NULL;
232 } else { 177 } else {
233 a->argv[a->argc++] = arg; 178 a->argv[a->argc++] = arg;
234 } 179 }
235 } 180 }
181 if(option) {
182 fprintf(stderr,
183 "Missing argument for option -%c\n\n", optchar);
184 cmd_args_free(a);
185 return NULL;
186 }
236 187
237 return a; 188 return a;
238 } 189 }
239 190
240 char* cmd_getoption(CmdArgs *arg, char *name) { 191 char* cmd_getoption(CmdArgs *arg, char *name) {

mercurial