if (arg)
{
- if (option->flags & CL_SEPARATE)
+ if ((option->flags & CL_SEPARATE)
+ && !(option->flags & CL_SEPARATE_ALIAS))
{
decoded->canonical_option[0] = opt_text;
decoded->canonical_option[1] = arg;
const char *warn_message = NULL;
bool separate_arg_flag;
bool joined_arg_flag;
+ bool have_separate_arg = false;
opt = argv[0];
result = 2;
if (arg == NULL)
result = 1;
+ else
+ have_separate_arg = true;
}
else
/* Missing argument. */
result = 2;
if (arg == NULL)
result = 1;
+ else
+ have_separate_arg = true;
}
if (arg == NULL && (separate_arg_flag || joined_arg_flag))
/* Is this option an alias (or an ignored option, marked as an alias
of OPT_SPECIAL_ignore)? */
- if (option->alias_target != N_OPTS)
+ if (option->alias_target != N_OPTS
+ && (!(option->flags & CL_SEPARATE_ALIAS) || have_separate_arg))
{
size_t new_opt_index = option->alias_target;