summaryrefslogtreecommitdiffstats
path: root/src/simfs.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2011-02-07 12:19:14 -0600
committerDenis Kenzior <denkenz@gmail.com>2011-02-07 12:25:46 -0600
commit417b445eaf0a4d8bcff59fb93e865e83c7d92b78 (patch)
treedd8e200fafe05916f31ef894a670eef9f43978c2 /src/simfs.c
parent00a3a6d7ac74456445715f7b881bce4e658d9390 (diff)
downloadofono-417b445eaf0a4d8bcff59fb93e865e83c7d92b78.tar.bz2
simfs: Add file changed watches to simfs contexts
Diffstat (limited to 'src/simfs.c')
-rw-r--r--src/simfs.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/simfs.c b/src/simfs.c
index 04594477..9f7dba71 100644
--- a/src/simfs.c
+++ b/src/simfs.c
@@ -109,8 +109,14 @@ void sim_fs_free(struct sim_fs *fs)
g_free(fs);
}
+struct file_watch {
+ struct ofono_watchlist_item item;
+ int ef;
+};
+
struct ofono_sim_context {
struct sim_fs *fs;
+ struct ofono_watchlist *file_watches;
};
struct sim_fs *sim_fs_new(struct ofono_sim *sim,
@@ -164,9 +170,42 @@ void sim_fs_context_free(struct ofono_sim_context *context)
g_queue_remove(context->fs->op_q, op);
}
+ if (context->file_watches)
+ __ofono_watchlist_free(context->file_watches);
+
g_free(context);
}
+unsigned int sim_fs_file_watch_add(struct ofono_sim_context *context, int id,
+ ofono_sim_file_changed_cb_t cb,
+ void *userdata,
+ ofono_destroy_func destroy)
+{
+ struct file_watch *watch;
+
+ if (cb == NULL)
+ return 0;
+
+ if (context->file_watches == NULL)
+ context->file_watches = __ofono_watchlist_new(g_free);
+
+ watch = g_new0(struct file_watch, 1);
+
+ watch->ef = id;
+ watch->item.notify = cb;
+ watch->item.notify_data = userdata;
+ watch->item.destroy = destroy;
+
+ return __ofono_watchlist_add_item(context->file_watches,
+ (struct ofono_watchlist_item *) watch);
+}
+
+void sim_fs_file_watch_remove(struct ofono_sim_context *context,
+ unsigned int id)
+{
+ __ofono_watchlist_remove_item(context->file_watches, id);
+}
+
static void sim_fs_end_current(struct sim_fs *fs)
{
struct sim_fs_op *op = g_queue_pop_head(fs->op_q);