Add infrastructure for global settings storage
authorMarcel Holtmann <marcel@holtmann.org>
Wed, 22 Jul 2009 11:04:25 +0000 (13:04 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 22 Jul 2009 11:04:25 +0000 (13:04 +0200)
include/storage.h
src/connman.h
src/element.c
src/storage.c

index bb3b374..d0e48b1 100644 (file)
@@ -43,6 +43,8 @@ extern "C" {
 struct connman_storage {
        const char *name;
        int priority;
+       int (*global_load) (void);
+       int (*global_save) (void);
        enum connman_device_type device_type;
        int (*device_init) (void);
        int (*device_load) (struct connman_device *device);
index aa4c2ee..63e8a68 100644 (file)
@@ -124,6 +124,9 @@ int __connman_resolver_selftest(void);
 int __connman_storage_init(void);
 void __connman_storage_cleanup(void);
 
+int __connman_storage_load_global();
+int __connman_storage_save_global();
+
 int __connman_storage_init_device();
 int __connman_storage_load_device(struct connman_device *device);
 int __connman_storage_save_device(struct connman_device *device);
index c6b97d9..b4ce9b2 100644 (file)
@@ -1607,6 +1607,8 @@ void __connman_element_start(void)
 
        started = TRUE;
 
+       __connman_storage_load_global();
+
        __connman_storage_init_device();
 
        __connman_connection_init();
@@ -1621,6 +1623,8 @@ void __connman_element_stop(void)
        __connman_rfkill_cleanup();
        __connman_ipv4_cleanup();
        __connman_connection_cleanup();
+
+       __connman_storage_save_global();
 }
 
 static gboolean free_driver(GNode *node, gpointer data)
index 08b7249..2018cf2 100644 (file)
@@ -66,6 +66,42 @@ void connman_storage_unregister(struct connman_storage *storage)
        storage_list = g_slist_remove(storage_list, storage);
 }
 
+int __connman_storage_load_global(void)
+{
+       GSList *list;
+
+       DBG("");
+
+       for (list = storage_list; list; list = list->next) {
+               struct connman_storage *storage = list->data;
+
+               if (storage->global_load) {
+                       if (storage->global_load() == 0)
+                               return 0;
+               }
+       }
+
+       return -ENOENT;
+}
+
+int __connman_storage_save_global(void)
+{
+       GSList *list;
+
+       DBG("");
+
+       for (list = storage_list; list; list = list->next) {
+               struct connman_storage *storage = list->data;
+
+               if (storage->global_save) {
+                       if (storage->global_save() == 0)
+                               return 0;
+               }
+       }
+
+       return -ENOENT;
+}
+
 int __connman_storage_init_device(void)
 {
        GSList *list;