in source/command_line_parser.c [72:138]
int aws_cli_getopt_long(
int argc,
char *const argv[],
const char *optstring,
const struct aws_cli_option *longopts,
int *longindex) {
aws_cli_optarg = NULL;
if (aws_cli_optind >= argc) {
return -1;
}
char first_char = argv[aws_cli_optind][0];
char second_char = argv[aws_cli_optind][1];
char *option_start = NULL;
const struct aws_cli_option *option = NULL;
bool positional_arg_encountered = false;
if (first_char == '-' && second_char != '-') {
aws_cli_on_arg = true;
positional_arg_encountered = false;
option_start = &argv[aws_cli_optind][1];
option = s_find_option_from_char(longopts, *option_start, longindex);
} else if (first_char == '-' && second_char == '-') {
aws_cli_on_arg = true;
positional_arg_encountered = false;
option_start = &argv[aws_cli_optind][2];
option = s_find_option_from_c_str(longopts, option_start, longindex);
} else {
if (!aws_cli_on_arg) {
aws_cli_positional_arg = argv[aws_cli_optind];
positional_arg_encountered = true;
} else {
aws_cli_on_arg = false;
aws_cli_positional_arg = NULL;
}
}
aws_cli_optind++;
if (option) {
bool has_arg = false;
aws_cli_on_arg = false;
aws_cli_positional_arg = NULL;
char *opt_value = memchr(optstring, option->val, strlen(optstring) + 1);
if (!opt_value) {
return '?';
}
if (opt_value[1] == ':') {
has_arg = true;
}
if (has_arg) {
if (aws_cli_optind >= argc) {
return '?';
}
aws_cli_optarg = argv[aws_cli_optind++];
}
return option->val;
}
/* start of text to indicate we just have a text argument. */
return positional_arg_encountered ? 0x02 : '?';
}