diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-03-15 09:39:46 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-03-15 11:14:58 +0100 |
commit | 30eb0faa8d4894659cc90c76cc634148df86eab9 (patch) | |
tree | b6cfb44c28bf018c575f11720e28cda06d346063 /src/util/getopt_helpers.c | |
parent | cd475225e4fd83fcc16b77ea1294c11428447209 (diff) | |
download | gnunet-30eb0faa8d4894659cc90c76cc634148df86eab9.tar.gz gnunet-30eb0faa8d4894659cc90c76cc634148df86eab9.zip |
getopt major style fix, remove macro-mania with nicer typed functions
Diffstat (limited to 'src/util/getopt_helpers.c')
-rw-r--r-- | src/util/getopt_helpers.c | 450 |
1 files changed, 410 insertions, 40 deletions
diff --git a/src/util/getopt_helpers.c b/src/util/getopt_helpers.c index 4d7104503..234f5371f 100644 --- a/src/util/getopt_helpers.c +++ b/src/util/getopt_helpers.c | |||
@@ -38,11 +38,11 @@ | |||
38 | * @param value not used (NULL) | 38 | * @param value not used (NULL) |
39 | * @return #GNUNET_NO (do not continue, not an error) | 39 | * @return #GNUNET_NO (do not continue, not an error) |
40 | */ | 40 | */ |
41 | int | 41 | static int |
42 | GNUNET_GETOPT_print_version_ (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 42 | print_version (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
43 | void *scls, | 43 | void *scls, |
44 | const char *option, | 44 | const char *option, |
45 | const char *value) | 45 | const char *value) |
46 | { | 46 | { |
47 | const char *version = scls; | 47 | const char *version = scls; |
48 | 48 | ||
@@ -54,6 +54,26 @@ GNUNET_GETOPT_print_version_ (struct GNUNET_GETOPT_CommandLineProcessorContext * | |||
54 | 54 | ||
55 | 55 | ||
56 | /** | 56 | /** |
57 | * Define the option to print the version of | ||
58 | * the application (-v option) | ||
59 | * | ||
60 | * @param version string with the version number | ||
61 | */ | ||
62 | struct GNUNET_GETOPT_CommandLineOption | ||
63 | GNUNET_GETOPT_OPTION_VERSION (const char *version) | ||
64 | { | ||
65 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
66 | .shortName = 'v', | ||
67 | .name = "version", | ||
68 | .description = gettext_noop("print the version number"), | ||
69 | .processor = &print_version, | ||
70 | .scls = (void *) version | ||
71 | }; | ||
72 | return clo; | ||
73 | } | ||
74 | |||
75 | |||
76 | /** | ||
57 | * At what offset does the help text start? | 77 | * At what offset does the help text start? |
58 | */ | 78 | */ |
59 | #define BORDER 29 | 79 | #define BORDER 29 |
@@ -67,11 +87,11 @@ GNUNET_GETOPT_print_version_ (struct GNUNET_GETOPT_CommandLineProcessorContext * | |||
67 | * @param value not used (NULL) | 87 | * @param value not used (NULL) |
68 | * @return #GNUNET_NO (do not continue, not an error) | 88 | * @return #GNUNET_NO (do not continue, not an error) |
69 | */ | 89 | */ |
70 | int | 90 | static int |
71 | GNUNET_GETOPT_format_help_ (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 91 | format_help (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
72 | void *scls, | 92 | void *scls, |
73 | const char *option, | 93 | const char *option, |
74 | const char *value) | 94 | const char *value) |
75 | { | 95 | { |
76 | const char *about = scls; | 96 | const char *about = scls; |
77 | size_t slen; | 97 | size_t slen; |
@@ -165,6 +185,27 @@ OUTER: | |||
165 | 185 | ||
166 | 186 | ||
167 | /** | 187 | /** |
188 | * Defining the option to print the command line | ||
189 | * help text (-h option). | ||
190 | * | ||
191 | * @param about string with brief description of the application | ||
192 | */ | ||
193 | struct GNUNET_GETOPT_CommandLineOption | ||
194 | GNUNET_GETOPT_OPTION_HELP (const char *about) | ||
195 | { | ||
196 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
197 | .shortName = 'h', | ||
198 | .name = "help", | ||
199 | .description = gettext_noop("print this help"), | ||
200 | .processor = format_help, | ||
201 | .scls = (void *) about | ||
202 | }; | ||
203 | |||
204 | return clo; | ||
205 | } | ||
206 | |||
207 | |||
208 | /** | ||
168 | * Set an option of type 'unsigned int' from the command line. Each | 209 | * Set an option of type 'unsigned int' from the command line. Each |
169 | * time the option flag is given, the value is incremented by one. | 210 | * time the option flag is given, the value is incremented by one. |
170 | * A pointer to this function should be passed as part of the | 211 | * A pointer to this function should be passed as part of the |
@@ -173,17 +214,18 @@ OUTER: | |||
173 | * type 'int'. | 214 | * type 'int'. |
174 | * | 215 | * |
175 | * @param ctx command line processing context | 216 | * @param ctx command line processing context |
176 | * @param scls additional closure (will point to the 'int') | 217 | * @param scls additional closure (will point to the 'unsigned int') |
177 | * @param option name of the option | 218 | * @param option name of the option |
178 | * @param value not used (NULL) | 219 | * @param value not used (NULL) |
179 | * @return #GNUNET_OK | 220 | * @return #GNUNET_OK |
180 | */ | 221 | */ |
181 | int | 222 | static int |
182 | GNUNET_GETOPT_increment_value (struct GNUNET_GETOPT_CommandLineProcessorContext | 223 | increment_value (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
183 | *ctx, void *scls, const char *option, | 224 | void *scls, |
184 | const char *value) | 225 | const char *option, |
226 | const char *value) | ||
185 | { | 227 | { |
186 | int *val = scls; | 228 | unsigned int *val = scls; |
187 | 229 | ||
188 | (*val)++; | 230 | (*val)++; |
189 | return GNUNET_OK; | 231 | return GNUNET_OK; |
@@ -191,6 +233,54 @@ GNUNET_GETOPT_increment_value (struct GNUNET_GETOPT_CommandLineProcessorContext | |||
191 | 233 | ||
192 | 234 | ||
193 | /** | 235 | /** |
236 | * Increment @a val each time the option flag is given by one. | ||
237 | * | ||
238 | * @param shortName short name of the option | ||
239 | * @param name long name of the option | ||
240 | * @param argumentHelp help text for the option argument | ||
241 | * @param description long help text for the option | ||
242 | * @param[out] val increment by 1 each time the option is present | ||
243 | */ | ||
244 | struct GNUNET_GETOPT_CommandLineOption | ||
245 | GNUNET_GETOPT_OPTION_INCREMENT_VALUE (char shortName, | ||
246 | const char *name, | ||
247 | const char *description, | ||
248 | unsigned int *val) | ||
249 | { | ||
250 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
251 | .shortName = shortName, | ||
252 | .name = name, | ||
253 | .description = description, | ||
254 | .processor = &increment_value, | ||
255 | .scls = (void *) val | ||
256 | }; | ||
257 | |||
258 | return clo; | ||
259 | } | ||
260 | |||
261 | |||
262 | /** | ||
263 | * Define the '-V' verbosity option. Using the option more | ||
264 | * than once increments @a level each time. | ||
265 | * | ||
266 | * @param[out] level set to the verbosity level | ||
267 | */ | ||
268 | struct GNUNET_GETOPT_CommandLineOption | ||
269 | GNUNET_GETOPT_OPTION_VERBOSE (int *level) | ||
270 | { | ||
271 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
272 | .shortName = 'V', | ||
273 | .name = "verbose", | ||
274 | .description = gettext_noop("be verbose"), | ||
275 | .processor = &increment_value, | ||
276 | .scls = (void *) level | ||
277 | }; | ||
278 | |||
279 | return clo; | ||
280 | } | ||
281 | |||
282 | |||
283 | /** | ||
194 | * Set an option of type 'int' from the command line to 1 if the | 284 | * Set an option of type 'int' from the command line to 1 if the |
195 | * given option is present. | 285 | * given option is present. |
196 | * A pointer to this function should be passed as part of the | 286 | * A pointer to this function should be passed as part of the |
@@ -204,9 +294,11 @@ GNUNET_GETOPT_increment_value (struct GNUNET_GETOPT_CommandLineProcessorContext | |||
204 | * @param value not used (NULL) | 294 | * @param value not used (NULL) |
205 | * @return #GNUNET_OK | 295 | * @return #GNUNET_OK |
206 | */ | 296 | */ |
207 | int | 297 | static int |
208 | GNUNET_GETOPT_set_one (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 298 | set_one (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
209 | void *scls, const char *option, const char *value) | 299 | void *scls, |
300 | const char *option, | ||
301 | const char *value) | ||
210 | { | 302 | { |
211 | int *val = scls; | 303 | int *val = scls; |
212 | 304 | ||
@@ -216,6 +308,34 @@ GNUNET_GETOPT_set_one (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | |||
216 | 308 | ||
217 | 309 | ||
218 | /** | 310 | /** |
311 | * Allow user to specify a flag (which internally means setting | ||
312 | * an integer to 1/#GNUNET_YES/#GNUNET_OK. | ||
313 | * | ||
314 | * @param shortName short name of the option | ||
315 | * @param name long name of the option | ||
316 | * @param argumentHelp help text for the option argument | ||
317 | * @param description long help text for the option | ||
318 | * @param[out] val set to 1 if the option is present | ||
319 | */ | ||
320 | struct GNUNET_GETOPT_CommandLineOption | ||
321 | GNUNET_GETOPT_OPTION_SET_ONE (char shortName, | ||
322 | const char *name, | ||
323 | const char *description, | ||
324 | int *val) | ||
325 | { | ||
326 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
327 | .shortName = shortName, | ||
328 | .name = name, | ||
329 | .description = description, | ||
330 | .processor = &set_one, | ||
331 | .scls = (void *) val | ||
332 | }; | ||
333 | |||
334 | return clo; | ||
335 | } | ||
336 | |||
337 | |||
338 | /** | ||
219 | * Set an option of type 'char *' from the command line. | 339 | * Set an option of type 'char *' from the command line. |
220 | * A pointer to this function should be passed as part of the | 340 | * A pointer to this function should be passed as part of the |
221 | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | 341 | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options |
@@ -229,9 +349,11 @@ GNUNET_GETOPT_set_one (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | |||
229 | * @param value actual value of the option (a string) | 349 | * @param value actual value of the option (a string) |
230 | * @return #GNUNET_OK | 350 | * @return #GNUNET_OK |
231 | */ | 351 | */ |
232 | int | 352 | static int |
233 | GNUNET_GETOPT_set_string (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 353 | set_string (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
234 | void *scls, const char *option, const char *value) | 354 | void *scls, |
355 | const char *option, | ||
356 | const char *value) | ||
235 | { | 357 | { |
236 | char **val = scls; | 358 | char **val = scls; |
237 | 359 | ||
@@ -242,18 +364,159 @@ GNUNET_GETOPT_set_string (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | |||
242 | } | 364 | } |
243 | 365 | ||
244 | 366 | ||
245 | int | 367 | /** |
246 | GNUNET_GETOPT_set_filename (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 368 | * Allow user to specify a string. |
247 | void *scls, const char *option, const char *value) | 369 | * |
370 | * @param shortName short name of the option | ||
371 | * @param name long name of the option | ||
372 | * @param argumentHelp help text for the option argument | ||
373 | * @param description long help text for the option | ||
374 | * @param[out] str set to the string | ||
375 | */ | ||
376 | struct GNUNET_GETOPT_CommandLineOption | ||
377 | GNUNET_GETOPT_OPTION_STRING (char shortName, | ||
378 | const char *name, | ||
379 | const char *argumentHelp, | ||
380 | const char *description, | ||
381 | char **str) | ||
382 | { | ||
383 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
384 | .shortName = shortName, | ||
385 | .name = name, | ||
386 | .argumentHelp = argumentHelp, | ||
387 | .description = description, | ||
388 | .require_argument = 1, | ||
389 | .processor = &set_string, | ||
390 | .scls = (void *) str | ||
391 | }; | ||
392 | |||
393 | return clo; | ||
394 | } | ||
395 | |||
396 | |||
397 | /** | ||
398 | * Define the '-L' log level option. Note that we do not check | ||
399 | * that the log level is valid here. | ||
400 | * | ||
401 | * @param[out] level set to the log level | ||
402 | */ | ||
403 | struct GNUNET_GETOPT_CommandLineOption | ||
404 | GNUNET_GETOPT_OPTION_LOGLEVEL (char **level) | ||
405 | { | ||
406 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
407 | .shortName = 'L', | ||
408 | .name = "log", | ||
409 | .argumentHelp = "LOGLEVEL", | ||
410 | .description = gettext_noop("configure logging to use LOGLEVEL"), | ||
411 | .require_argument = 1, | ||
412 | .processor = &set_string, | ||
413 | .scls = (void *) level | ||
414 | }; | ||
415 | |||
416 | return clo; | ||
417 | } | ||
418 | |||
419 | |||
420 | /** | ||
421 | * Set an option of type 'char *' from the command line with | ||
422 | * filename expansion a la #GNUNET_STRINGS_filename_expand(). | ||
423 | * | ||
424 | * @param ctx command line processing context | ||
425 | * @param scls additional closure (will point to the `char *`, | ||
426 | * which will be allocated) | ||
427 | * @param option name of the option | ||
428 | * @param value actual value of the option (a string) | ||
429 | * @return #GNUNET_OK | ||
430 | */ | ||
431 | static int | ||
432 | set_filename (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | ||
433 | void *scls, | ||
434 | const char *option, | ||
435 | const char *value) | ||
248 | { | 436 | { |
249 | char **val = scls; | 437 | char **val = scls; |
250 | 438 | ||
251 | GNUNET_assert (value != NULL); | 439 | GNUNET_assert (NULL != value); |
252 | GNUNET_free_non_null (*val); | 440 | GNUNET_free_non_null (*val); |
253 | *val = GNUNET_STRINGS_filename_expand (value); | 441 | *val = GNUNET_STRINGS_filename_expand (value); |
254 | return GNUNET_OK; | 442 | return GNUNET_OK; |
255 | } | 443 | } |
256 | 444 | ||
445 | |||
446 | /** | ||
447 | * Allow user to specify a filename (automatically path expanded). | ||
448 | * | ||
449 | * @param shortName short name of the option | ||
450 | * @param name long name of the option | ||
451 | * @param argumentHelp help text for the option argument | ||
452 | * @param description long help text for the option | ||
453 | * @param[out] str set to the string | ||
454 | */ | ||
455 | struct GNUNET_GETOPT_CommandLineOption | ||
456 | GNUNET_GETOPT_OPTION_FILENAME (char shortName, | ||
457 | const char *name, | ||
458 | const char *argumentHelp, | ||
459 | const char *description, | ||
460 | char **str) | ||
461 | { | ||
462 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
463 | .shortName = shortName, | ||
464 | .name = name, | ||
465 | .argumentHelp = argumentHelp, | ||
466 | .description = description, | ||
467 | .require_argument = 1, | ||
468 | .processor = &set_filename, | ||
469 | .scls = (void *) str | ||
470 | }; | ||
471 | |||
472 | return clo; | ||
473 | } | ||
474 | |||
475 | |||
476 | /** | ||
477 | * Allow user to specify log file name (-l option) | ||
478 | * | ||
479 | * @param[out] logfn set to the name of the logfile | ||
480 | */ | ||
481 | struct GNUNET_GETOPT_CommandLineOption | ||
482 | GNUNET_GETOPT_OPTION_LOGFILE (char **logfn) | ||
483 | { | ||
484 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
485 | .shortName = 'l', | ||
486 | .name = "logfile", | ||
487 | .argumentHelp = "FILENAME", | ||
488 | .description = gettext_noop ("configure logging to write logs to FILENAME"), | ||
489 | .require_argument = 1, | ||
490 | .processor = &set_filename, | ||
491 | .scls = (void *) logfn | ||
492 | }; | ||
493 | |||
494 | return clo; | ||
495 | } | ||
496 | |||
497 | |||
498 | /** | ||
499 | * Allow user to specify configuration file name (-c option) | ||
500 | * | ||
501 | * @param[out] fn set to the name of the configuration file | ||
502 | */ | ||
503 | struct GNUNET_GETOPT_CommandLineOption | ||
504 | GNUNET_GETOPT_OPTION_CFG_FILE (char **fn) | ||
505 | { | ||
506 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
507 | .shortName = 'c', | ||
508 | .name = "config", | ||
509 | .argumentHelp = "FILENAME", | ||
510 | .description = gettext_noop("use configuration file FILENAME"), | ||
511 | .require_argument = 1, | ||
512 | .processor = &set_filename, | ||
513 | .scls = (void *) fn | ||
514 | }; | ||
515 | |||
516 | return clo; | ||
517 | } | ||
518 | |||
519 | |||
257 | /** | 520 | /** |
258 | * Set an option of type 'unsigned long long' from the command line. | 521 | * Set an option of type 'unsigned long long' from the command line. |
259 | * A pointer to this function should be passed as part of the | 522 | * A pointer to this function should be passed as part of the |
@@ -267,15 +530,21 @@ GNUNET_GETOPT_set_filename (struct GNUNET_GETOPT_CommandLineProcessorContext *ct | |||
267 | * @param value actual value of the option as a string. | 530 | * @param value actual value of the option as a string. |
268 | * @return #GNUNET_OK if parsing the value worked | 531 | * @return #GNUNET_OK if parsing the value worked |
269 | */ | 532 | */ |
270 | int | 533 | static int |
271 | GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 534 | set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
272 | void *scls, const char *option, const char *value) | 535 | void *scls, |
536 | const char *option, | ||
537 | const char *value) | ||
273 | { | 538 | { |
274 | unsigned long long *val = scls; | 539 | unsigned long long *val = scls; |
275 | 540 | ||
276 | if (1 != SSCANF (value, "%llu", val)) | 541 | if (1 != SSCANF (value, |
542 | "%llu", | ||
543 | val)) | ||
277 | { | 544 | { |
278 | FPRINTF (stderr, _("You must pass a number to the `%s' option.\n"), option); | 545 | FPRINTF (stderr, |
546 | _("You must pass a number to the `%s' option.\n"), | ||
547 | option); | ||
279 | return GNUNET_SYSERR; | 548 | return GNUNET_SYSERR; |
280 | } | 549 | } |
281 | return GNUNET_OK; | 550 | return GNUNET_OK; |
@@ -283,6 +552,36 @@ GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | |||
283 | 552 | ||
284 | 553 | ||
285 | /** | 554 | /** |
555 | * Allow user to specify an `unsigned long long` | ||
556 | * | ||
557 | * @param shortName short name of the option | ||
558 | * @param name long name of the option | ||
559 | * @param argumentHelp help text for the option argument | ||
560 | * @param description long help text for the option | ||
561 | * @param[out] val set to the value specified at the command line | ||
562 | */ | ||
563 | struct GNUNET_GETOPT_CommandLineOption | ||
564 | GNUNET_GETOPT_OPTION_SET_ULONG (char shortName, | ||
565 | const char *name, | ||
566 | const char *argumentHelp, | ||
567 | const char *description, | ||
568 | unsigned long long *val) | ||
569 | { | ||
570 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
571 | .shortName = shortName, | ||
572 | .name = name, | ||
573 | .argumentHelp = argumentHelp, | ||
574 | .description = description, | ||
575 | .require_argument = 1, | ||
576 | .processor = &set_ulong, | ||
577 | .scls = (void *) val | ||
578 | }; | ||
579 | |||
580 | return clo; | ||
581 | } | ||
582 | |||
583 | |||
584 | /** | ||
286 | * Set an option of type 'struct GNUNET_TIME_Relative' from the command line. | 585 | * Set an option of type 'struct GNUNET_TIME_Relative' from the command line. |
287 | * A pointer to this function should be passed as part of the | 586 | * A pointer to this function should be passed as part of the |
288 | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | 587 | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options |
@@ -295,9 +594,11 @@ GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | |||
295 | * @param value actual value of the option as a string. | 594 | * @param value actual value of the option as a string. |
296 | * @return #GNUNET_OK if parsing the value worked | 595 | * @return #GNUNET_OK if parsing the value worked |
297 | */ | 596 | */ |
298 | int | 597 | static int |
299 | GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 598 | set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
300 | void *scls, const char *option, const char *value) | 599 | void *scls, |
600 | const char *option, | ||
601 | const char *value) | ||
301 | { | 602 | { |
302 | struct GNUNET_TIME_Relative *val = scls; | 603 | struct GNUNET_TIME_Relative *val = scls; |
303 | 604 | ||
@@ -305,7 +606,9 @@ GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorContex | |||
305 | GNUNET_STRINGS_fancy_time_to_relative (value, | 606 | GNUNET_STRINGS_fancy_time_to_relative (value, |
306 | val)) | 607 | val)) |
307 | { | 608 | { |
308 | FPRINTF (stderr, _("You must pass relative time to the `%s' option.\n"), option); | 609 | FPRINTF (stderr, |
610 | _("You must pass relative time to the `%s' option.\n"), | ||
611 | option); | ||
309 | return GNUNET_SYSERR; | 612 | return GNUNET_SYSERR; |
310 | } | 613 | } |
311 | return GNUNET_OK; | 614 | return GNUNET_OK; |
@@ -313,6 +616,37 @@ GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorContex | |||
313 | 616 | ||
314 | 617 | ||
315 | /** | 618 | /** |
619 | * Allow user to specify a `struct GNUNET_TIME_Relative` | ||
620 | * (using human-readable "fancy" time). | ||
621 | * | ||
622 | * @param shortName short name of the option | ||
623 | * @param name long name of the option | ||
624 | * @param argumentHelp help text for the option argument | ||
625 | * @param description long help text for the option | ||
626 | * @param[out] val set to the time specified at the command line | ||
627 | */ | ||
628 | struct GNUNET_GETOPT_CommandLineOption | ||
629 | GNUNET_GETOPT_OPTION_SET_RELATIVE_TIME (char shortName, | ||
630 | const char *name, | ||
631 | const char *argumentHelp, | ||
632 | const char *description, | ||
633 | struct GNUNET_TIME_Relative *val) | ||
634 | { | ||
635 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
636 | .shortName = shortName, | ||
637 | .name = name, | ||
638 | .argumentHelp = argumentHelp, | ||
639 | .description = description, | ||
640 | .require_argument = 1, | ||
641 | .processor = &set_relative_time, | ||
642 | .scls = (void *) val | ||
643 | }; | ||
644 | |||
645 | return clo; | ||
646 | } | ||
647 | |||
648 | |||
649 | /** | ||
316 | * Set an option of type 'unsigned int' from the command line. | 650 | * Set an option of type 'unsigned int' from the command line. |
317 | * A pointer to this function should be passed as part of the | 651 | * A pointer to this function should be passed as part of the |
318 | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | 652 | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options |
@@ -325,19 +659,55 @@ GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorContex | |||
325 | * @param value actual value of the option as a string. | 659 | * @param value actual value of the option as a string. |
326 | * @return #GNUNET_OK if parsing the value worked | 660 | * @return #GNUNET_OK if parsing the value worked |
327 | */ | 661 | */ |
328 | int | 662 | static int |
329 | GNUNET_GETOPT_set_uint (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, | 663 | set_uint (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, |
330 | void *scls, const char *option, const char *value) | 664 | void *scls, |
665 | const char *option, | ||
666 | const char *value) | ||
331 | { | 667 | { |
332 | unsigned int *val = scls; | 668 | unsigned int *val = scls; |
333 | 669 | ||
334 | if (1 != SSCANF (value, "%u", val)) | 670 | if (1 != SSCANF (value, |
671 | "%u", | ||
672 | val)) | ||
335 | { | 673 | { |
336 | FPRINTF (stderr, _("You must pass a number to the `%s' option.\n"), option); | 674 | FPRINTF (stderr, |
675 | _("You must pass a number to the `%s' option.\n"), | ||
676 | option); | ||
337 | return GNUNET_SYSERR; | 677 | return GNUNET_SYSERR; |
338 | } | 678 | } |
339 | return GNUNET_OK; | 679 | return GNUNET_OK; |
340 | } | 680 | } |
341 | 681 | ||
342 | 682 | ||
683 | /** | ||
684 | * Allow user to specify an unsigned integer. | ||
685 | * | ||
686 | * @param shortName short name of the option | ||
687 | * @param name long name of the option | ||
688 | * @param argumentHelp help text for the option argument | ||
689 | * @param description long help text for the option | ||
690 | * @param[out] val set to the value specified at the command line | ||
691 | */ | ||
692 | struct GNUNET_GETOPT_CommandLineOption | ||
693 | GNUNET_GETOPT_OPTION_SET_UINT (char shortName, | ||
694 | const char *name, | ||
695 | const char *argumentHelp, | ||
696 | const char *description, | ||
697 | unsigned int *val) | ||
698 | { | ||
699 | struct GNUNET_GETOPT_CommandLineOption clo = { | ||
700 | .shortName = shortName, | ||
701 | .name = name, | ||
702 | .argumentHelp = argumentHelp, | ||
703 | .description = description, | ||
704 | .require_argument = 1, | ||
705 | .processor = &set_uint, | ||
706 | .scls = (void *) val | ||
707 | }; | ||
708 | |||
709 | return clo; | ||
710 | } | ||
711 | |||
712 | |||
343 | /* end of getopt_helpers.c */ | 713 | /* end of getopt_helpers.c */ |