[PATCH kdrive/ephyr v7 5/9] kdrive: add options to set default XKB properties

Peter Hutterer peter.hutterer at who-t.net
Tue Feb 9 04:23:57 UTC 2016


On Fri, Dec 11, 2015 at 11:43:10AM -0200, Laércio de Sousa wrote:
> This patch introduces convenient command-line options -xkbrules,
> -xkbmodel, -xkblayout, -xkbvariant, and -xkboptions, to set default
> values for these properties.
> 
> These options can be handful in cases where corresponding values can't
> be taken from devices' udev properties, and compile-time default
> values don't match user locale.
> 
> Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
> ---
>  hw/kdrive/src/kdrive.c | 40 ++++++++++++++++++++++++++++++++++++++++
>  hw/kdrive/src/kinput.c | 16 +++++++++++-----
>  2 files changed, 51 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
> index 8930ace..1578458 100644
> --- a/hw/kdrive/src/kdrive.c
> +++ b/hw/kdrive/src/kdrive.c
> @@ -85,6 +85,11 @@ char *kdSwitchCmd;
>  DDXPointRec kdOrigin;
>  Bool kdHasPointer = FALSE;
>  Bool kdHasKbd = FALSE;
> +const char *kdGlobalXkbRules = NULL;
> +const char *kdGlobalXkbModel = NULL;
> +const char *kdGlobalXkbLayout = NULL;
> +const char *kdGlobalXkbVariant = NULL;
> +const char *kdGlobalXkbOptions = NULL;
>  
>  static Bool kdCaughtSignal = FALSE;
>  
> @@ -451,6 +456,11 @@ KdUseMsg(void)
>          ("-mouse driver [,n,,options]    Specify the pointer driver and its options (n is the number of buttons)\n");
>      ErrorF
>          ("-keybd driver [,,options]      Specify the keyboard driver and its options\n");
> +    ErrorF("-xkbrules        Set default XkbRules value (can be overriden by -keybd options)\n");
> +    ErrorF("-xkbmodel        Set default XkbModel value (can be overriden by -keybd options)\n");
> +    ErrorF("-xkblayout       Set default XkbLayout value (can be overriden by -keybd options)\n");
> +    ErrorF("-xkbvariant      Set default XkbVariant value (can be overriden by -keybd options)\n");
> +    ErrorF("-xkboptions      Set default XkbOptions value (can be overriden by -keybd options)\n");
>      ErrorF("-zaphod          Disable cursor screen switching\n");
>      ErrorF("-2button         Emulate 3 button mouse\n");
>      ErrorF("-3button         Disable 3 button mouse emulation\n");
> @@ -559,6 +569,36 @@ KdProcessArgument(int argc, char **argv, int i)
>          sscanf(argv[i], "vt%2d", &kdVirtualTerminal) == 1) {
>          return 1;
>      }
> +    if (!strcmp(argv[i], "-xkbrules")) {
> +        if (i + 1 >= argc)
> +            UseMsg();

afaict UseMsg() doesn't actually exist, so you're accessing invalid memory
here.

Cheers,
   Peter

> +        kdGlobalXkbRules = argv[i + 1];
> +        return 2;
> +    }
> +    if (!strcmp(argv[i], "-xkbmodel")) {
> +        if (i + 1 >= argc)
> +            UseMsg();
> +        kdGlobalXkbModel = argv[i + 1];
> +        return 2;
> +    }
> +    if (!strcmp(argv[i], "-xkblayout")) {
> +        if (i + 1 >= argc)
> +            UseMsg();
> +        kdGlobalXkbLayout = argv[i + 1];
> +        return 2;
> +    }
> +    if (!strcmp(argv[i], "-xkbvariant")) {
> +        if (i + 1 >= argc)
> +            UseMsg();
> +        kdGlobalXkbVariant = argv[i + 1];
> +        return 2;
> +    }
> +    if (!strcmp(argv[i], "-xkboptions")) {
> +        if (i + 1 >= argc)
> +            UseMsg();
> +        kdGlobalXkbOptions = argv[i + 1];
> +        return 2;
> +    }
>      if (!strcmp(argv[i], "-mouse") || !strcmp(argv[i], "-pointer")) {
>          if (i + 1 >= argc)
>              UseMsg();
> diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
> index e9a5f24..0acf82e 100644
> --- a/hw/kdrive/src/kinput.c
> +++ b/hw/kdrive/src/kinput.c
> @@ -102,6 +102,12 @@ static int kdNumInputFds;
>  
>  extern Bool kdRawPointerCoordinates;
>  
> +extern const char *kdGlobalXkbRules;
> +extern const char *kdGlobalXkbModel;
> +extern const char *kdGlobalXkbLayout;
> +extern const char *kdGlobalXkbVariant;
> +extern const char *kdGlobalXkbOptions;
> +
>  static void
>  KdSigio(int sig)
>  {
> @@ -931,11 +937,11 @@ KdNewKeyboard(void)
>      ki->options = NULL;
>      ki->name = strdup("Generic Keyboard");
>      ki->path = NULL;
> -    ki->xkbRules = strdup(XKB_DFLT_RULES);
> -    ki->xkbModel = strdup(XKB_DFLT_MODEL);
> -    ki->xkbLayout = strdup(XKB_DFLT_LAYOUT);
> -    ki->xkbVariant = strdup(XKB_DFLT_VARIANT);
> -    ki->xkbOptions = strdup(XKB_DFLT_OPTIONS);
> +    ki->xkbRules = strdup(kdGlobalXkbRules ? kdGlobalXkbRules : XKB_DFLT_RULES);
> +    ki->xkbModel = strdup(kdGlobalXkbModel ? kdGlobalXkbModel : XKB_DFLT_MODEL);
> +    ki->xkbLayout = strdup(kdGlobalXkbLayout ? kdGlobalXkbLayout : XKB_DFLT_LAYOUT);
> +    ki->xkbVariant = strdup(kdGlobalXkbVariant ? kdGlobalXkbVariant :XKB_DFLT_VARIANT);
> +    ki->xkbOptions = strdup(kdGlobalXkbOptions ? kdGlobalXkbOptions : XKB_DFLT_OPTIONS);
>  
>      return ki;
>  }
> -- 
> 2.1.4
 


More information about the xorg-devel mailing list