aboutsummaryrefslogtreecommitdiff
path: root/loader/loader.c
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2016-04-07 09:04:49 +1200
committerJon Ashburn <jon@lunarg.com>2016-04-07 10:43:35 -0600
commitf2c4f23432f913c332be793dc776a1810ed688b7 (patch)
tree1b46c9d0c3bb004947cf41be17f70417a8af7328 /loader/loader.c
parentdd2e70c0799b302bc07b86f759afe9c0aaeda941 (diff)
downloadusermoji-f2c4f23432f913c332be793dc776a1810ed688b7.tar.xz
loader: Preserve order during layer list expansion
As requested by Jon -- instead of appending the expanded layers, insert them in place of the meta layer. Signed-off-by: Chris Forbes <chrisforbes@google.com>
Diffstat (limited to 'loader/loader.c')
-rw-r--r--loader/loader.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/loader/loader.c b/loader/loader.c
index c81aeab0..687b1b9f 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1728,8 +1728,9 @@ static bool loader_find_layer_name_array(
* layer key_name.
* If not found then simply returns updating nothing.
* Otherwise, it uses expand_count, expand_names adding them to layer names.
- * Any duplicate (pre-existing) exapand_names in layer names are removed.
- * Expand names are added to the back/end of the list of layer names.
+ * Any duplicate (pre-existing) expand_names in layer names are removed.
+ * Order is otherwise preserved, with the layer key_name being replaced by the
+ * expand_names.
* @param inst
* @param layer_count
* @param ppp_layer_names
@@ -1757,17 +1758,20 @@ void loader_expand_layer_names(
// expand_names.
uint32_t src_index, dst_index = 0;
for (src_index = 0; src_index < *layer_count; src_index++) {
- if (loader_find_layer_name_array(pp_src_layers[src_index], expand_count, expand_names) ||
- !strcmp(pp_src_layers[src_index], key_name)) {
+ if (loader_find_layer_name_array(pp_src_layers[src_index], expand_count, expand_names)) {
continue;
}
- pp_dst_layers[dst_index++] = pp_src_layers[src_index];
- }
+ if (!strcmp(pp_src_layers[src_index], key_name)) {
+ // insert all expand_names in place of key_name
+ uint32_t expand_index;
+ for (expand_index = 0; expand_index < expand_count; expand_index++) {
+ pp_dst_layers[dst_index++] = expand_names[expand_index];
+ }
+ continue;
+ }
- // append expand_names.
- for (src_index = 0; src_index < expand_count; src_index++) {
- pp_dst_layers[dst_index++] = expand_names[src_index];
+ pp_dst_layers[dst_index++] = pp_src_layers[src_index];
}
*ppp_layer_names = pp_dst_layers;