int min_prio = override_only ? 1 : 0;
if (ucl_object_get_priority(obj) > min_prio) {
- result = ucl_object_typed_new(ucl_object_type(obj));
+
switch (ucl_object_type(obj)) {
case UCL_OBJECT:
- case UCL_ARRAY:
+ result = ucl_object_typed_new(ucl_object_type(obj));
+
while ((cur = ucl_object_iterate(obj, &it, true))) {
ucl_object_t *filtered = filter_non_default(cur, override_conf_only);
if (filtered) {
}
}
break;
+ case UCL_ARRAY:
+ result = ucl_object_typed_new(ucl_object_type(obj));
+
+ while ((cur = ucl_object_iterate(obj, &it, true))) {
+ ucl_object_t *filtered = filter_non_default(cur, override_conf_only);
+ if (filtered) {
+ ucl_array_append(result, filtered);
+ }
+ }
default:
- ucl_object_insert_key(result, ucl_object_ref(obj), ucl_object_key(obj), obj->keylen, true);
+ result = ucl_object_ref(obj);
break;
}
+
return result;
}
ucl_object_t *filtered = filter_non_default(cur, override_only);
if (filtered) {
has_non_default = true;
- ucl_object_insert_key(result, filtered, ucl_object_key(cur), cur->keylen, true);
+
+ if (ucl_object_type(obj) == UCL_OBJECT) {
+ ucl_object_insert_key(result, filtered,
+ ucl_object_key(cur), cur->keylen, true);
+ }
+ else if (ucl_object_type(obj) == UCL_ARRAY) {
+ ucl_array_append(result, filtered);
+ }
+ else {
+ g_assert_not_reached();
+ }
}
}
return result;
}
+
return NULL;
}