On Thu, Apr 16, 2009 at 5:01 PM, Peter Hutterer <[email protected]> wrote: > 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
Looks like a winner to me. Acked-by: Dan Nicholson <[email protected]> -- Dan _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
