From 8f184bb6ca34ef662d3f8e20d2cddee6c05f9101 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Sat, 12 Jul 2025 11:47:06 -0700 Subject: [PATCH] Revert "xkb: drop obsolete parameter from XkbRF_Free()" This reverts commit abfbc768240f740192e00e3c136d37f93bec542d. Part-of: --- xkb/ddxLoad.c | 4 ++-- xkb/maprules.c | 11 ++++++++--- xkb/xkbrules_priv.h | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c index a231e96bf..8001cb25d 100644 --- a/xkb/ddxLoad.c +++ b/xkb/ddxLoad.c @@ -436,14 +436,14 @@ XkbDDXNamesFromRules(DeviceIntPtr keybd, if (!XkbRF_LoadRules(file, rules)) { LogMessage(X_ERROR, "XKB: Couldn't parse rules file %s\n", rules_name); fclose(file); - XkbRF_Free(rules); + XkbRF_Free(rules, TRUE); return FALSE; } memset(names, 0, sizeof(*names)); complete = XkbRF_GetComponents(rules, defs, names); fclose(file); - XkbRF_Free(rules); + XkbRF_Free(rules, TRUE); if (!complete) LogMessage(X_ERROR, "XKB: Rules returned no components\n"); diff --git a/xkb/maprules.c b/xkb/maprules.c index 222b6107e..b5bdfefc3 100644 --- a/xkb/maprules.c +++ b/xkb/maprules.c @@ -969,7 +969,7 @@ XkbRF_LoadRules(FILE * file, XkbRF_RulesPtr rules) } void -XkbRF_Free(XkbRF_RulesPtr rules) +XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules) { int i; XkbRF_RulePtr rule; @@ -988,8 +988,11 @@ XkbRF_Free(XkbRF_RulesPtr rules) free((void *) rule->types); free((void *) rule->compat); free((void *) rule->geometry); + memset((char *) rule, 0, sizeof(XkbRF_RuleRec)); } free(rules->rules); + rules->num_rules = rules->sz_rules = 0; + rules->rules = NULL; } if (rules->groups) { @@ -998,8 +1001,10 @@ XkbRF_Free(XkbRF_RulesPtr rules) free(group->words); } free(rules->groups); + rules->num_groups = 0; + rules->groups = NULL; } - - free(rules); + if (freeRules) + free(rules); return; } diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h index deb29d093..3739c15a8 100644 --- a/xkb/xkbrules_priv.h +++ b/xkb/xkbrules_priv.h @@ -56,6 +56,6 @@ static inline XkbRF_RulesPtr XkbRF_Create(void) return calloc(1, sizeof(XkbRF_RulesRec)); } -void XkbRF_Free(XkbRF_RulesPtr rules); +void XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules); #endif /* _XSERVER_XKB_XKBRULES_PRIV_H */