From 2cec48fb1ce9c790dc83e73295ecc54c957dd812 Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski Date: Mon, 10 Jan 2011 12:01:31 +0100 Subject: [PATCH] simfs: Add cache flushing functions --- src/simfs.c | 68 +++++++++++++++++++++++++++++++++++++++++++++---------------- src/simfs.h | 5 +++++ 2 files changed, 56 insertions(+), 17 deletions(-) diff --git a/src/simfs.c b/src/simfs.c index 617af14..b77e1dc 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); } diff --git a/src/simfs.h b/src/simfs.h index ef962db..8c6f761 100644 --- a/src/simfs.h +++ b/src/simfs.h @@ -47,4 +47,9 @@ char *sim_fs_get_cached_image(struct sim_fs *fs, int id); void sim_fs_cache_image(struct sim_fs *fs, const char *image, int id); +void sim_fs_cache_flush(struct sim_fs *fs); +void sim_fs_cache_flush_file(struct sim_fs *fs, int id); +void sim_fs_image_cache_flush(struct sim_fs *fs); +void sim_fs_image_cache_flush_file(struct sim_fs *fs, int id); + void sim_fs_free(struct sim_fs *fs); -- 2.7.4