summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/connman.h1
-rw-r--r--src/storage.c63
2 files changed, 64 insertions, 0 deletions
diff --git a/src/connman.h b/src/connman.h
index bda4f7fa..388e6fb0 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -214,6 +214,7 @@ int __connman_storage_save_service(GKeyFile *keyfile, const char *ident);
GKeyFile *__connman_storage_load_provider(const char *identifier);
void __connman_storage_save_provider(GKeyFile *keyfile, const char *identifier);
char **__connman_storage_get_providers(void);
+gboolean __connman_storage_remove_service(const char *service_id);
int __connman_detect_init(void);
void __connman_detect_cleanup(void);
diff --git a/src/storage.c b/src/storage.c
index b93554d0..47bd0cbc 100644
--- a/src/storage.c
+++ b/src/storage.c
@@ -266,6 +266,69 @@ int __connman_storage_save_service(GKeyFile *keyfile, const char *service_id)
return ret;
}
+static gboolean remove_file(const char *service_id, const char *file)
+{
+ gchar *pathname;
+ gboolean ret = FALSE;
+
+ pathname = g_strdup_printf("%s/%s/%s", STORAGEDIR, service_id, file);
+ if(pathname == NULL)
+ return FALSE;
+
+ if (g_file_test(pathname, G_FILE_TEST_EXISTS) == FALSE) {
+ ret = TRUE;
+ } else if (g_file_test(pathname, G_FILE_TEST_IS_REGULAR) == TRUE) {
+ unlink(pathname);
+ ret = TRUE;
+ }
+
+ g_free(pathname);
+ return ret;
+}
+
+static gboolean remove_dir(const char *service_id)
+{
+ gchar *pathname;
+ gboolean ret = FALSE;
+
+ pathname = g_strdup_printf("%s/%s", STORAGEDIR, service_id);
+ if(pathname == NULL)
+ return FALSE;
+
+ if (g_file_test(pathname, G_FILE_TEST_EXISTS) == FALSE) {
+ ret = TRUE;
+ } else if (g_file_test(pathname, G_FILE_TEST_IS_DIR) == TRUE) {
+ rmdir(pathname);
+ ret = TRUE;
+ }
+
+ g_free(pathname);
+ return ret;
+}
+
+gboolean __connman_storage_remove_service(const char *service_id)
+{
+ gboolean removed;
+
+ /* Remove service configuration file */
+ removed = remove_file(service_id, SETTINGS);
+ if (removed == FALSE)
+ return FALSE;
+
+ /* Remove the statistics file also */
+ removed = remove_file(service_id, "data");
+ if (removed == FALSE)
+ return FALSE;
+
+ removed = remove_dir(service_id);
+ if (removed == FALSE)
+ return FALSE;
+
+ DBG("Removed service dir %s/%s", STORAGEDIR, service_id);
+
+ return TRUE;
+}
+
GKeyFile *__connman_storage_load_provider(const char *identifier)
{
gchar *pathname;