aboutsummaryrefslogtreecommitdiff
path: root/package/network/services/hostapd/src/src/utils/ucode.c
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/services/hostapd/src/src/utils/ucode.c')
-rw-r--r--package/network/services/hostapd/src/src/utils/ucode.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/package/network/services/hostapd/src/src/utils/ucode.c b/package/network/services/hostapd/src/src/utils/ucode.c
index fabf58a5e8..a92913aedc 100644
--- a/package/network/services/hostapd/src/src/utils/ucode.c
+++ b/package/network/services/hostapd/src/src/utils/ucode.c
@@ -179,6 +179,20 @@ uc_value_t *wpa_ucode_global_init(const char *name, uc_resource_type_t *global_t
return global;
}
+static uc_value_t *wpa_ucode_prototype_clone(uc_value_t *uval)
+{
+ uc_value_t *proto, *proto_new;
+
+ proto = ucv_prototype_get(uval);
+ proto_new = ucv_object_new(&vm);
+
+ ucv_object_foreach(proto, key, val)
+ ucv_object_add(proto_new, key, ucv_get(val));
+ ucv_prototype_set(uval, ucv_get(proto));
+
+ return proto;
+}
+
void wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val, int *idx)
{
uc_value_t *data;
@@ -190,7 +204,7 @@ void wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val, int *idx)
ucv_array_set(reg, i, ucv_get(val));
data = ucv_object_new(&vm);
- ucv_object_add(ucv_prototype_get(val), "data", ucv_get(data));
+ ucv_object_add(wpa_ucode_prototype_clone(val), "data", ucv_get(data));
*idx = i + 1;
}