(parse_options): Allow GNU-like option arguments like
"--desktop=800x600". (Not perfect -- we don't allow shorthands.)
diff --git a/misc/options.c b/misc/options.c
index cae462f..ca8d99a 100644
--- a/misc/options.c
+++ b/misc/options.c
@@ -248,6 +248,7 @@
for (i = 0; argv[i]; i++)
{
+ const char *equalarg = NULL;
char *p = argv[i];
if (*p++ != '-') continue; /* not an option */
if (*p && !p[1]) /* short name */
@@ -257,14 +258,31 @@
}
else /* long name */
{
+ const char *equal = strchr (p, '=');
if (*p == '-') p++;
/* check for the long name */
- for (opt = option_table; opt->longname; opt++)
+ for (opt = option_table; opt->longname; opt++) {
+ /* Plain --option */
if (!strcmp( p, opt->longname )) break;
+
+ /* --option=value */
+ if (opt->has_arg &&
+ equal &&
+ strlen (opt->longname) == equal - p &&
+ !strncmp (p, opt->longname, equal - p)) {
+ equalarg = equal + 1;
+ break;
+ }
+ }
}
if (!opt->longname) continue;
- if (opt->has_arg && argv[i+1])
+ if (equalarg)
+ {
+ opt->func( equalarg );
+ remove_options( argv, i, 1, opt->inherit );
+ }
+ else if (opt->has_arg && argv[i+1])
{
opt->func( argv[i+1] );
remove_options( argv, i, 2, opt->inherit );