From 90dedc657c452ddfb25fdfeeddaa7e8e81c99fdd Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Thu, 23 Nov 2023 09:30:57 +0100 Subject: [PATCH] xkbcomp: Use `steal` for better memory handling --- meson.build | 1 + src/xkbcomp/compat.c | 7 +++---- src/xkbcomp/keycodes.c | 7 +++---- src/xkbcomp/symbols.c | 7 +++---- src/xkbcomp/types.c | 7 +++---- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/meson.build b/meson.build index ded142f72..25b9ef6da 100644 --- a/meson.build +++ b/meson.build @@ -228,6 +228,7 @@ libxkbcommon_sources = [ 'src/text.h', 'src/utf8.c', 'src/utf8.h', + 'src/util-mem.h', 'src/utils.c', 'src/utils.h', ] diff --git a/src/xkbcomp/compat.c b/src/xkbcomp/compat.c index 1df9e0376..bb45c692e 100644 --- a/src/xkbcomp/compat.c +++ b/src/xkbcomp/compat.c @@ -55,6 +55,7 @@ #include "action.h" #include "vmod.h" #include "include.h" +#include "util-mem.h" enum si_field { SI_FIELD_VIRTUAL_MOD = (1 << 0), @@ -393,8 +394,7 @@ MergeIncludedCompatMaps(CompatInfo *into, CompatInfo *from, into->mods = from->mods; if (into->name == NULL) { - into->name = from->name; - from->name = NULL; + into->name = steal(&from->name); } if (darray_empty(into->interps)) { @@ -440,8 +440,7 @@ HandleIncludeCompatMap(CompatInfo *info, IncludeStmt *include) InitCompatInfo(&included, info->ctx, 0 /* unused */, info->actions, &info->mods); - included.name = include->stmt; - include->stmt = NULL; + included.name = steal(&include->stmt); for (IncludeStmt *stmt = include; stmt; stmt = stmt->next_incl) { CompatInfo next_incl; diff --git a/src/xkbcomp/keycodes.c b/src/xkbcomp/keycodes.c index 700cd1c3f..3e3254d19 100644 --- a/src/xkbcomp/keycodes.c +++ b/src/xkbcomp/keycodes.c @@ -30,6 +30,7 @@ #include "text.h" #include "expr.h" #include "include.h" +#include "util-mem.h" typedef struct { enum merge_mode merge; @@ -268,8 +269,7 @@ MergeIncludedKeycodes(KeyNamesInfo *into, KeyNamesInfo *from, } if (into->name == NULL) { - into->name = from->name; - from->name = NULL; + into->name = steal(&from->name); } /* Merge key names. */ @@ -348,8 +348,7 @@ HandleIncludeKeycodes(KeyNamesInfo *info, IncludeStmt *include) } InitKeyNamesInfo(&included, info->ctx, 0 /* unused */); - included.name = include->stmt; - include->stmt = NULL; + included.name = steal(&include->stmt); for (IncludeStmt *stmt = include; stmt; stmt = stmt->next_incl) { KeyNamesInfo next_incl; diff --git a/src/xkbcomp/symbols.c b/src/xkbcomp/symbols.c index 0c4fbebd6..4492a737e 100644 --- a/src/xkbcomp/symbols.c +++ b/src/xkbcomp/symbols.c @@ -60,6 +60,7 @@ #include "vmod.h" #include "include.h" #include "keysym.h" +#include "util-mem.h" enum key_repeat { @@ -518,8 +519,7 @@ MergeIncludedSymbols(SymbolsInfo *into, SymbolsInfo *from, into->mods = from->mods; if (into->name == NULL) { - into->name = from->name; - from->name = NULL; + into->name = steal(&from->name); } group_names_in_both = MIN(darray_size(into->group_names), @@ -579,8 +579,7 @@ HandleIncludeSymbols(SymbolsInfo *info, IncludeStmt *include) InitSymbolsInfo(&included, info->keymap, 0 /* unused */, info->actions, &info->mods); - included.name = include->stmt; - include->stmt = NULL; + included.name = steal(&include->stmt); for (IncludeStmt *stmt = include; stmt; stmt = stmt->next_incl) { SymbolsInfo next_incl; diff --git a/src/xkbcomp/types.c b/src/xkbcomp/types.c index f22c9ef07..404bfea28 100644 --- a/src/xkbcomp/types.c +++ b/src/xkbcomp/types.c @@ -31,6 +31,7 @@ #include "vmod.h" #include "expr.h" #include "include.h" +#include "util-mem.h" enum type_field { TYPE_FIELD_MASK = (1 << 0), @@ -192,8 +193,7 @@ MergeIncludedKeyTypes(KeyTypesInfo *into, KeyTypesInfo *from, into->mods = from->mods; if (into->name == NULL) { - into->name = from->name; - from->name = NULL; + into->name = steal(&from->name); } if (darray_empty(into->types)) { @@ -228,8 +228,7 @@ HandleIncludeKeyTypes(KeyTypesInfo *info, IncludeStmt *include) } InitKeyTypesInfo(&included, info->ctx, 0 /* unused */, &info->mods); - included.name = include->stmt; - include->stmt = NULL; + included.name = steal(&include->stmt); for (IncludeStmt *stmt = include; stmt; stmt = stmt->next_incl) { KeyTypesInfo next_incl;