+static bool
+instance_config_parse(struct service_instance *in)
+{
+ struct blob_attr *tb[__INSTANCE_ATTR_MAX];
+ struct blob_attr *cur;
+
+ blobmsg_parse(instance_attr, __INSTANCE_ATTR_MAX, tb,
+ blobmsg_data(in->config), blobmsg_data_len(in->config));
+ if (!tb[INSTANCE_ATTR_COMMAND])
+ return false;
+
+ if ((cur = tb[INSTANCE_ATTR_ENV]))
+ blobmsg_list_fill(&in->env, blobmsg_data(cur), blobmsg_data_len(cur));
+
+ if ((cur = tb[INSTANCE_ATTR_DATA]))
+ blobmsg_list_fill(&in->data, blobmsg_data(cur), blobmsg_data_len(cur));
+
+ return true;
+}
+
+static void
+instance_config_cleanup(struct service_instance *in)
+{
+ blobmsg_list_free(&in->env);
+ blobmsg_list_free(&in->data);
+}
+
+static void
+instance_config_move(struct service_instance *in, struct service_instance *in_src)
+{
+ instance_config_cleanup(in);
+ blobmsg_list_move(&in->env, &in_src->env);
+ blobmsg_list_move(&in->data, &in_src->data);
+ in->command = in_src->command;
+}
+