types: put all copy-to-keymap code in one function Signed-off-by: Ran Benita <ran234@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
diff --git a/src/xkbcomp/types.c b/src/xkbcomp/types.c
index 737fc1e..c3ba17a 100644
--- a/src/xkbcomp/types.c
+++ b/src/xkbcomp/types.c
@@ -776,56 +776,55 @@ HandleKeyTypesFile(KeyTypesInfo *info, XkbFile *file, enum merge_mode merge)
}
}
-static void
-CopyDefToKeyType(KeyTypeInfo *def, struct xkb_key_type *type)
-{
- type->mods.mods = def->mods;
- type->num_levels = def->num_levels;
- type->map = darray_mem(def->entries, 0);
- type->num_entries = darray_size(def->entries);
- darray_init(def->entries);
- type->name = def->name;
- type->level_names = darray_mem(def->level_names, 0);
- darray_init(def->level_names);
-}
+/***====================================================================***/
static bool
CopyKeyTypesToKeymap(struct xkb_keymap *keymap, KeyTypesInfo *info)
{
- unsigned int i;
- unsigned int num_types;
+ keymap->types_section_name = strdup_safe(info->name);
- num_types = darray_size(info->types) ? darray_size(info->types) : 1;
- keymap->types = calloc(num_types, sizeof(*keymap->types));
- if (!keymap->types)
- return false;
+ keymap->num_types = darray_size(info->types);
+ if (keymap->num_types == 0)
+ keymap->num_types = 1;
- keymap->num_types = num_types;
+ keymap->types = calloc(keymap->num_types, sizeof(*keymap->types));
/*
* If no types were specified, a default unnamed one-level type is
* used for all keys.
*/
if (darray_empty(info->types)) {
- KeyTypeInfo dflt = {
- .name = xkb_atom_intern(keymap->ctx, "default"),
- .mods = 0,
- .num_levels = 1,
- .entries = darray_new(),
- .level_names = darray_new(),
- };
-
- CopyDefToKeyType(&dflt, &keymap->types[0]);
- } else {
- for (i = 0; i < num_types; i++)
- CopyDefToKeyType(&darray_item(info->types, i), &keymap->types[i]);
+ struct xkb_key_type *type = &keymap->types[0];
+
+ type->mods.mods = 0;
+ type->num_levels = 1;
+ type->map = NULL;
+ type->num_entries = 0;
+ type->name = xkb_atom_intern(keymap->ctx, "default");
+ type->level_names = NULL;
+
+ return true;
}
- keymap->types_section_name = strdup_safe(info->name);
+ for (unsigned i = 0; i < keymap->num_types; i++) {
+ KeyTypeInfo *def = &darray_item(info->types, i);
+ struct xkb_key_type *type = &keymap->types[i];
+
+ type->mods.mods = def->mods;
+ type->num_levels = def->num_levels;
+ type->map = darray_mem(def->entries, 0);
+ type->num_entries = darray_size(def->entries);
+ darray_init(def->entries);
+ type->name = def->name;
+ type->level_names = darray_mem(def->level_names, 0);
+ darray_init(def->level_names);
+ }
return true;
}
+/***====================================================================***/
+
bool
CompileKeyTypes(XkbFile *file, struct xkb_keymap *keymap,
enum merge_mode merge)