- /* Then merge the keysyms. */
-
- /*
- * We want to avoid copying and allocating if not necessary. So
- * here we do a pre-scan of the levels to check if we'll only use
- * @into's or @from's keysyms, and if so we'll just assign them.
- * However if one level uses @into's and another uses @from's, we
- * will need to construct a new syms array.
- */
- using = 0;
- for (i = 0; i < numLevels; i++) {
- unsigned int intoSize, fromSize;
-
- intoSize = darray_item(into->levels, i).num_syms;
- if (i < darray_size(from->levels))
- fromSize = darray_item(from->levels, i).num_syms;
- else
- fromSize = 0;
-
- if (intoSize == 0 && fromSize == 0)
- using |= 0;
- else if (intoSize == 0)
- using |= FROM;
- else if (fromSize == 0)
- using |= INTO;
- else
- using |= (clobber ? FROM : INTO);
- }
-
- if (using == 0 || using == INTO) {
- }
- else if (using == FROM) {
- darray_free(into->syms);
- into->syms = from->syms;
- darray_init(from->syms);
- for (i = 0; i < darray_size(from->levels); i++) {
- darray_item(into->levels, i).num_syms =
- darray_item(from->levels, i).num_syms;
- darray_item(into->levels, i).sym_index =
- darray_item(from->levels, i).sym_index;