summaryrefslogtreecommitdiffstats
path: root/src/simfs.c
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2011-01-10 12:01:31 +0100
committerDenis Kenzior <denkenz@gmail.com>2011-01-12 14:07:09 -0600
commit2cec48fb1ce9c790dc83e73295ecc54c957dd812 (patch)
tree004c4bc6e06e7b7ae09af7b70d6bc14e9b29973c /src/simfs.c
parent5213119ac514428edb1547e0e2f49eadc60ec111 (diff)
downloadofono-2cec48fb1ce9c790dc83e73295ecc54c957dd812.tar.bz2
simfs: Add cache flushing functions
Diffstat (limited to 'src/simfs.c')
-rw-r--r--src/simfs.c68
1 files changed, 51 insertions, 17 deletions
diff --git a/src/simfs.c b/src/simfs.c
index 617af149..b77e1dc0 100644
--- a/src/simfs.c
+++ b/src/simfs.c
@@ -907,9 +907,6 @@ void sim_fs_check_version(struct sim_fs *fs)
const char *imsi = ofono_sim_get_imsi(fs->sim);
enum ofono_sim_phase phase = ofono_sim_get_phase(fs->sim);
unsigned char version;
- struct dirent **entries;
- int len;
- char *path;
if (imsi == NULL || phase == OFONO_SIM_PHASE_UNKNOWN)
return;
@@ -918,10 +915,20 @@ void sim_fs_check_version(struct sim_fs *fs)
if (version == SIM_FS_VERSION)
return;
- path = g_strdup_printf(SIM_CACHE_BASEPATH, imsi, phase);
+ sim_fs_cache_flush(fs);
+
+ version = SIM_FS_VERSION;
+ write_file(&version, 1, SIM_CACHE_MODE, SIM_CACHE_VERSION, imsi, phase);
+}
+
+void sim_fs_cache_flush(struct sim_fs *fs)
+{
+ const char *imsi = ofono_sim_get_imsi(fs->sim);
+ enum ofono_sim_phase phase = ofono_sim_get_phase(fs->sim);
+ char *path = g_strdup_printf(SIM_CACHE_BASEPATH, imsi, phase);
+ struct dirent **entries;
+ int len = scandir(path, &entries, NULL, alphasort);
- ofono_info("Detected old simfs version in %s, removing", path);
- len = scandir(path, &entries, NULL, alphasort);
g_free(path);
if (len > 0) {
@@ -934,20 +941,47 @@ void sim_fs_check_version(struct sim_fs *fs)
g_free(entries);
}
- path = g_strdup_printf(SIM_IMAGE_CACHE_BASEPATH, imsi, phase);
- len = scandir(path, &entries, NULL, alphasort);
+ sim_fs_image_cache_flush(fs);
+}
+
+void sim_fs_cache_flush_file(struct sim_fs *fs, int id)
+{
+ const char *imsi = ofono_sim_get_imsi(fs->sim);
+ enum ofono_sim_phase phase = ofono_sim_get_phase(fs->sim);
+ char *path = g_strdup_printf(SIM_CACHE_PATH, imsi, phase, id);
+
+ remove(path);
g_free(path);
+}
- if (len > 0) {
- /* Remove everything */
- while (len--) {
- remove_imagefile(imsi, phase, entries[len]);
- g_free(entries[len]);
- }
+void sim_fs_image_cache_flush(struct sim_fs *fs)
+{
+ const char *imsi = ofono_sim_get_imsi(fs->sim);
+ enum ofono_sim_phase phase = ofono_sim_get_phase(fs->sim);
+ char *path = g_strdup_printf(SIM_IMAGE_CACHE_BASEPATH, imsi, phase);
+ struct dirent **entries;
+ int len = scandir(path, &entries, NULL, alphasort);
- g_free(entries);
+ g_free(path);
+
+ if (len <= 0)
+ return;
+
+ /* Remove everything */
+ while (len--) {
+ remove_imagefile(imsi, phase, entries[len]);
+ g_free(entries[len]);
}
- version = SIM_FS_VERSION;
- write_file(&version, 1, SIM_CACHE_MODE, SIM_CACHE_VERSION, imsi, phase);
+ g_free(entries);
+}
+
+void sim_fs_image_cache_flush_file(struct sim_fs *fs, int id)
+{
+ const char *imsi = ofono_sim_get_imsi(fs->sim);
+ enum ofono_sim_phase phase = ofono_sim_get_phase(fs->sim);
+ char *path = g_strdup_printf(SIM_IMAGE_CACHE_PATH, imsi, phase, id);
+
+ remove(path);
+ g_free(path);
}