On Wed, Apr 15, 2009 at 10:17:57PM -0700, Dan Nicholson wrote:
> > static Bool
> > @@ -586,6 +596,17 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet
> > *rmlvo,
> > XkbSetRulesDflts(rmlvo);
> > XkbSetRulesUsed(rmlvo);
> >
> > + if (rmlvo_dflts.rules)
> > + xfree(rmlvo_dflts.rules);
> > + if (rmlvo_dflts.model)
> > + xfree(rmlvo_dflts.model);
> > + if (rmlvo_dflts.layout)
> > + xfree(rmlvo_dflts.layout);
> > + if (rmlvo_dflts.variant)
> > + xfree(rmlvo_dflts.variant);
> > + if (rmlvo_dflts.options)
> > + xfree(rmlvo_dflts.options);
>
> Can we get a helper for this to make it easier on callers? Something like:
>
> XkbFreeRMLVO(XkbRMLVOSet *rmlvo, Bool freeRules)
> {
> if (!rmlvo)
> return;
>
> xfree(rmlvo->rules);
> xfree(rmlvo->model);
> xfree(rmlvo->layout);
> xfree(rmlvo->variant);
> xfree(rmlvo->options);
>
> if (freeRules)
> xfree(rmlvo);
> }
>
> I think xfree/Xfree already does the right thing with NULL arguments.
How about this?
>From 404137d5d5c8f2ffaccd06b37308259dd5fa82ed Mon Sep 17 00:00:00 2001
From: Peter Hutterer <[email protected]>
Date: Thu, 16 Apr 2009 17:06:33 +1000
Subject: [PATCH] xkb: Add XkbFreeRMLVOSet helper function.
Signed-off-by: Peter Hutterer <[email protected]>
---
include/xkbsrv.h | 5 +++++
xkb/xkbInit.c | 30 +++++++++++++++++++-----------
2 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 8a81431..df33085 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -858,6 +858,11 @@ extern _X_EXPORT void XkbGetRulesDflts(
XkbRMLVOSet * /* rmlvo */
);
+extern _X_EXPORT void XkbFreeRMLVOSet(
+ XkbRMLVOSet * /* rmlvo */,
+ Bool /* freeRMLVO */
+);
+
extern _X_EXPORT void XkbSetRulesDflts(
XkbRMLVOSet * /* rmlvo */
);
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 9d4d9a2..5ac06fe 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -136,6 +136,24 @@ XkbGetRulesDflts(XkbRMLVOSet *rmlvo)
rmlvo->options = strdup(rmlvo->options);
}
+void
+XkbFreeRMLVOSet(XkbRMLVOSet *rmlvo, Bool freeRMLVO)
+{
+ if (!rmlvo)
+ return;
+
+ xfree(rmlvo->rules);
+ xfree(rmlvo->model);
+ xfree(rmlvo->layout);
+ xfree(rmlvo->variant);
+ xfree(rmlvo->options);
+
+ if (freeRMLVO)
+ xfree(rmlvo);
+ else
+ memset(rmlvo, 0, sizeof(XkbRMLVOSet));
+}
+
static Bool
XkbWriteRulesProp(ClientPtr client, pointer closure)
{
@@ -595,17 +613,7 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet
*rmlvo,
XkbSetRulesDflts(rmlvo);
XkbSetRulesUsed(rmlvo);
-
- if (rmlvo_dflts.rules)
- xfree(rmlvo_dflts.rules);
- if (rmlvo_dflts.model)
- xfree(rmlvo_dflts.model);
- if (rmlvo_dflts.layout)
- xfree(rmlvo_dflts.layout);
- if (rmlvo_dflts.variant)
- xfree(rmlvo_dflts.variant);
- if (rmlvo_dflts.options)
- xfree(rmlvo_dflts.options);
+ XkbFreeRMLVOSet(&rmlvo_dflts, FALSE);
return TRUE;
--
1.6.2.2.447.g4afa7
_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel