diff --git a/tests/src/test_getopt.c b/tests/src/test_getopt.c new file mode 100644 index 0000000..4b4a32e --- /dev/null +++ b/tests/src/test_getopt.c @@ -0,0 +1,87 @@ +/* + ============================================================================ + Name : test_getopt.c + Author : martin.dvorak@mindforger.com + Copyright : Apache 2.0 + Description : A test + ============================================================================ +*/ + +#include /* for printf */ +#include /* for exit */ +#include + +int main(int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = { + {"add", required_argument, 0, 0 }, + {"append", no_argument, 0, 0 }, + {"delete", required_argument, 0, 0 }, + {"verbose", no_argument, 0, 0 }, + {"create", required_argument, 0, 'c'}, + {"file", required_argument, 0, 0 }, + {0, 0, 0, 0 } + }; + + c = getopt_long(argc, argv, "abc:d:012", long_options, &option_index); + if (c == -1) + break; + + + switch (c) { + case 0: + printf("option %s", long_options[option_index].name); + if (optarg) + printf(" with arg %s", optarg); + printf("\n"); + break; + + case '0': + case '1': + case '2': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf("option %c\n", c); + break; + + case 'a': + printf("option a\n"); + break; + + case 'b': + printf("option b\n"); + break; + + case 'c': + printf("option c with value '%s'\n", optarg); + break; + + case 'd': + printf("option d with value '%s'\n", optarg); + break; + + case '?': + + break; + + default: + printf("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) { + printf("non-option ARGV-elements: "); + while (optind < argc) + printf("%s ", argv[optind++]); + printf("\n"); + } + + exit(EXIT_SUCCESS); +} diff --git a/tests/test_getopt.sh b/tests/test_getopt.sh new file mode 100755 index 0000000..bb32d67 --- /dev/null +++ b/tests/test_getopt.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +gcc ./src/test_getopt.c -o _getopt + +# eof