[PATCH 2/7] xkb: add a call to init an XkbRMLVOSet from const chars

walter harms wharms at bfs.de
Sat Feb 1 03:10:34 PST 2014



Am 30.01.2014 00:51, schrieb Peter Hutterer:
> Just forcing everything to const char* is not helpful, compiler warnings are
> supposed to warn about broken code. Forcing everything to const when it
> clearly isn't less than ideal.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  hw/xfree86/common/xf86Config.c | 16 ++++++++--------
>  include/xkbrules.h             | 10 +++++-----
>  include/xkbsrv.h               |  8 ++++++++
>  test/xkb.c                     | 16 +++++++++-------
>  xkb/xkbInit.c                  | 25 ++++++++++++++++++++-----
>  5 files changed, 50 insertions(+), 25 deletions(-)
> 
> diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
> index 258b22b..542d5ab 100644
> --- a/hw/xfree86/common/xf86Config.c
> +++ b/hw/xfree86/common/xf86Config.c
> @@ -777,13 +777,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
>      MessageType from;
>      const char *s;
>      XkbRMLVOSet set;
> -
> -    /* Default options. */
> -    set.rules = "base";
> -    set.model = "pc105";
> -    set.layout = "us";
> -    set.variant = NULL;
> -    set.options = NULL;
> +    const char *rules;
>  
>      /*
>       * Merge the ServerLayout and ServerFlags options.  The former have
> @@ -963,9 +957,15 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
>       * evdev rules set. */
>  #if defined(linux)
>      if (!xf86Info.forceInputDevices)
> -        set.rules = "evdev";
> +        rules = "evdev";
> +    else
>  #endif
> +        rules = "base";
> +
> +    /* Xkb default options. */
> +    XkbInitRules(&set, rules, "pc105", "us", NULL, NULL);
>      XkbSetRulesDflts(&set);
> +    XkbFreeRMLVOSet(&set, FALSE);
>  
>      xf86Info.useDefaultFontPath = TRUE;
>      xf86Info.useDefaultFontPathFrom = X_DEFAULT;
> diff --git a/include/xkbrules.h b/include/xkbrules.h
> index 956eade..ab5b4b2 100644
> --- a/include/xkbrules.h
> +++ b/include/xkbrules.h
> @@ -30,11 +30,11 @@
>  /***====================================================================***/
>  
>  typedef struct _XkbRMLVOSet {
> -    const char *rules;
> -    const char *model;
> -    const char *layout;
> -    const char *variant;
> -    const char *options;
> +    char *rules;
> +    char *model;
> +    char *layout;
> +    char *variant;
> +    char *options;
>  } XkbRMLVOSet;
>  
>  typedef struct _XkbRF_VarDefs {
> diff --git a/include/xkbsrv.h b/include/xkbsrv.h
> index 0b9ca06..e799799 100644
> --- a/include/xkbsrv.h
> +++ b/include/xkbsrv.h
> @@ -738,6 +738,14 @@ extern _X_EXPORT void XkbClearAllLatchesAndLocks(DeviceIntPtr /* dev */ ,
>                                                   XkbEventCausePtr       /* cause */
>      );
>  
> +extern _X_EXPORT void XkbInitRules(XkbRMLVOSet * /* rmlvo   */,
> +                                   const char *  /* rules   */,
> +                                   const char *  /* model   */,
> +                                   const char *  /* layout  */,
> +                                   const char *  /* variant */,
> +                                   const char *  /* options */
> +    ) ;
> +
>  extern _X_EXPORT void XkbGetRulesDflts(XkbRMLVOSet *    /* rmlvo */
>      );
>  
> diff --git a/test/xkb.c b/test/xkb.c
> index 955e72d..bfacc87 100644
> --- a/test/xkb.c
> +++ b/test/xkb.c
> @@ -82,15 +82,15 @@ xkb_get_rules_test(void)
>  static void
>  xkb_set_rules_test(void)
>  {
> -    XkbRMLVOSet rmlvo = {
> -        .rules = "test-rules",
> -        .model = "test-model",
> -        .layout = "test-layout",
> -        .variant = "test-variant",
> -        .options = "test-options"
> -    };
> +    XkbRMLVOSet rmlvo;
>      XkbRMLVOSet rmlvo_new = { NULL };
>  
> +    rmlvo.rules = strdup("test-rules");
> +    rmlvo.model = strdup("test-model");
> +    rmlvo.layout = strdup("test-layout");
> +    rmlvo.variant = strdup("test-variant");
> +    rmlvo.options = strdup("test-options");
> +
>      XkbSetRulesDflts(&rmlvo);
>      XkbGetRulesDflts(&rmlvo_new);
>  
> @@ -106,6 +106,8 @@ xkb_set_rules_test(void)
>      assert(strcmp(rmlvo.layout, rmlvo_new.layout) == 0);
>      assert(strcmp(rmlvo.variant, rmlvo_new.variant) == 0);
>      assert(strcmp(rmlvo.options, rmlvo_new.options) == 0);
> +
> +    XkbFreeRMLVOSet(&rmlvo, FALSE);
>  }
>  
>  /**
> diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
> index 22b971f..c0b85ce 100644
> --- a/xkb/xkbInit.c
> +++ b/xkb/xkbInit.c
> @@ -129,11 +129,11 @@ XkbFreeRMLVOSet(XkbRMLVOSet * rmlvo, Bool freeRMLVO)
>      if (!rmlvo)
>          return;
>  
> -    free((void *) rmlvo->rules);
> -    free((void *) rmlvo->model);
> -    free((void *) rmlvo->layout);
> -    free((void *) rmlvo->variant);
> -    free((void *) rmlvo->options);
> +    free(rmlvo->rules);
> +    free(rmlvo->model);
> +    free(rmlvo->layout);
> +    free(rmlvo->variant);
> +    free(rmlvo->options);
>  
>      if (freeRMLVO)
>          free(rmlvo);
> @@ -206,6 +206,21 @@ XkbWriteRulesProp(ClientPtr client, void *closure)
>      return TRUE;
>  }
>  
> +void
> +XkbInitRules(XkbRMLVOSet *rmlvo,
> +             const char *rules,
> +             const char *model,
> +             const char *layout,
> +             const char *variant,
> +             const char *options)
> +{
> +    rmlvo->rules = rules ? strdup(rules) : NULL;
> +    rmlvo->model = model ? strdup(model) : NULL;
> +    rmlvo->layout = layout ? strdup(layout) : NULL;
> +    rmlvo->variant = variant ? strdup(variant) : NULL;
> +    rmlvo->options = options ? strdup(options) : NULL;
> +}
> +



hi,
maybe i am to paranoid for this, but ...
strdup() may return NULL and set errno to ENOMEM. perhaps it is better to
have a safe version of strdup() or is it policy not to check because OOM
is unlikely ?

re,
 wh


>  static void
>  XkbSetRulesUsed(XkbRMLVOSet * rmlvo)
>  {


More information about the xorg-devel mailing list