[Spice-devel] [PATCH x11spice 1/2] Bug fix: --config=<filename> did not work.

Frediano Ziglio fziglio at redhat.com
Thu Jul 18 15:16:59 UTC 2019


It seems that x11spice is more X11 complaint than getopt_long so I
don't see the --config=/-config= mandatory.
Giving that -config is not GNU convention (they are 5 options!) I would avoid the mix.

> 
> Signed-off-by: Jeremy White <jwhite at codeweavers.com>
> ---
>  src/options.c | 24 ++++++++++++++++++++++--
>  1 file changed, 22 insertions(+), 2 deletions(-)
> 
> diff --git a/src/options.c b/src/options.c
> index b7f487c5..0d3138d0 100644
> --- a/src/options.c
> +++ b/src/options.c
> @@ -213,14 +213,34 @@ void options_handle_ssl_file_options(options_t
> *options,
>      options->ssl.ciphersuite = string_option(userkey, systemkey, "ssl",
>      "ciphersuite");
>  }
>  
> +/* In general, we want to parse the config file options before the command
> line
> +**  arguments.  However, the command line argument to specify a config file
> is
> +**  the exception.  We manually parse this out now, so we can simplify the
> +**  flow of control later. */
>  void options_handle_user_config(int argc, char *argv[], options_t *options)
>  {
>      int i;
> -    for (i = 1; i < argc - 1; i++)
> -        if (strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-config")
> == 0) {
> +    char *p, *q;
> +
> +    /* getopt long is complex; it supports [-]-config[=]filename */
> +    for (i = 1; i < argc; i++) {
> +        p = strstr(argv[i], "--config");
> +        if (p != argv[i]) {

strncmp instead ?

> +            p = strstr(argv[i], "-config");
> +        }
> +        if (p != argv[i]) {
> +            continue;
> +        }
> +        q = strstr(p, "=");

This will also accept "-config-whatever=value"

> +        if (q) {
> +            options->user_config_file = strdup(q + 1);
> +            continue;
> +        }
> +        if (i < argc - 1) {
>              options->user_config_file = strdup(argv[i + 1]);
>              i++;
>          }
> +    }
>  }
>  
>  int options_parse_arguments(int argc, char *argv[], options_t *options)

Frediano


More information about the Spice-devel mailing list