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

Reply via email to