[PATCH 2/7] xkb: add a call to init an XkbRMLVOSet from const chars
Peter Hutterer
peter.hutterer at who-t.net
Wed Jan 29 15:51:15 PST 2014
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;
+}
+
static void
XkbSetRulesUsed(XkbRMLVOSet * rmlvo)
{
--
1.8.4.2
More information about the xorg-devel
mailing list