config = g_hash_table_lookup(config_table, ident);
if (config != NULL) {
+ int ret;
+
g_hash_table_remove_all(config->service_table);
load_config(config);
- __connman_service_provision_changed(ident);
+ ret = __connman_service_provision_changed(ident);
+ if (ret > 0) {
+ /*
+ * Re-scan the config file for any
+ * changes
+ */
+ g_hash_table_remove_all(config->service_table);
+ load_config(config);
+ __connman_service_provision_changed(ident);
+ }
}
}
{
enum connman_service_type type;
struct connman_config *config;
+ int ret = 0;
DBG("service %p", service);
DBG("found %d ident %s file %s entry %s", found, ident,
file, entry);
- if (found == FALSE)
+ if (found == FALSE) {
/*
* The entry+8 will skip "service_" prefix
*/
g_hash_table_remove(config->service_table,
entry + 8);
+ ret = 1;
+ }
}
g_hash_table_foreach(config->service_table,
provision_service, service);
}
- return 0;
+ return ret;
}
void __connman_service_auto_connect(void);
gboolean __connman_service_remove(struct connman_service *service);
-void __connman_service_provision_changed(const char *ident);
+int __connman_service_provision_changed(const char *ident);
void __connman_service_set_config(struct connman_service *service,
const char *file_id, const char *section);
return NULL;
}
+struct provision_user_data {
+ const char *ident;
+ int ret;
+};
+
static void provision_changed(gpointer value, gpointer user_data)
{
struct connman_service *service = value;
- char *path = user_data;
+ struct provision_user_data *data = user_data;
+ const char *path = data->ident;
+ int ret;
- __connman_config_provision_service_ident(service, path,
+ ret = __connman_config_provision_service_ident(service, path,
service->config_file, service->config_entry);
+ if (ret > 0)
+ data->ret = ret;
}
-void __connman_service_provision_changed(const char *ident)
+int __connman_service_provision_changed(const char *ident)
{
- g_sequence_foreach(service_list, provision_changed, (void *)ident);
+ struct provision_user_data data = {
+ .ident = ident,
+ .ret = 0
+ };
+
+ g_sequence_foreach(service_list, provision_changed, (void *)&data);
/*
* Because the provision_changed() might have set some services
__connman_connection_update_gateway();
}
+
+ return data.ret;
}
void __connman_service_set_config(struct connman_service *service,