diff options
author | Denis Kenzior <denkenz@gmail.com> | 2011-02-07 12:19:14 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-02-07 12:25:46 -0600 |
commit | 417b445eaf0a4d8bcff59fb93e865e83c7d92b78 (patch) | |
tree | dd8e200fafe05916f31ef894a670eef9f43978c2 /src/simfs.c | |
parent | 00a3a6d7ac74456445715f7b881bce4e658d9390 (diff) | |
download | ofono-417b445eaf0a4d8bcff59fb93e865e83c7d92b78.tar.bz2 |
simfs: Add file changed watches to simfs contexts
Diffstat (limited to 'src/simfs.c')
-rw-r--r-- | src/simfs.c | 39 |
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); |