diff options
| author | Miika Pekkarinen <miipekk@ihme.org> | 2006-12-22 09:11:09 +0000 |
|---|---|---|
| committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-12-22 09:11:09 +0000 |
| commit | c8a9ca748d0a3b1961f6577159a9de8ac4af60e7 (patch) | |
| tree | 16f719514542087f5a2e0d5bac8d30b4fce5910a /firmware | |
| parent | 7258b5e51a78e4d990bf1225c5893dc4b78d78b7 (diff) | |
| download | rockbox-c8a9ca748d0a3b1961f6577159a9de8ac4af60e7.zip rockbox-c8a9ca748d0a3b1961f6577159a9de8ac4af60e7.tar.gz rockbox-c8a9ca748d0a3b1961f6577159a9de8ac4af60e7.tar.bz2 rockbox-c8a9ca748d0a3b1961f6577159a9de8ac4af60e7.tar.xz | |
Try to make sure dircache state file on flashed H1xx targets is
handled correctly and no old state is never used.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11833 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
| -rw-r--r-- | firmware/common/dircache.c | 16 | ||||
| -rw-r--r-- | firmware/include/dircache.h | 7 |
2 files changed, 15 insertions, 8 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index 18039ee..0523493 100644 --- a/firmware/common/dircache.c +++ b/firmware/common/dircache.c @@ -410,7 +410,7 @@ static struct dircache_entry* dircache_get_entry(const char *path, * Function to load the internal cache structure from disk to initialize * the dircache really fast and little disk access. */ -int dircache_load(const char *path) +int dircache_load(void) { struct dircache_maindata maindata; int bytes_read; @@ -422,7 +422,7 @@ int dircache_load(const char *path) logf("Loading directory cache"); dircache_size = 0; - fd = open(path, O_RDONLY); + fd = open(DIRCACHE_FILE, O_RDONLY); if (fd < 0) return -2; @@ -432,6 +432,7 @@ int dircache_load(const char *path) { logf("Dircache file header error"); close(fd); + remove(DIRCACHE_FILE); return -3; } @@ -440,6 +441,7 @@ int dircache_load(const char *path) { logf("Position missmatch"); close(fd); + remove(DIRCACHE_FILE); return -4; } @@ -447,6 +449,7 @@ int dircache_load(const char *path) entry_count = maindata.entry_count; bytes_read = read(fd, dircache_root, MIN(DIRCACHE_LIMIT, maindata.size)); close(fd); + remove(DIRCACHE_FILE); if (bytes_read != maindata.size) { @@ -469,13 +472,13 @@ int dircache_load(const char *path) * Function to save the internal cache stucture to disk for fast loading * on boot. */ -int dircache_save(const char *path) +int dircache_save(void) { struct dircache_maindata maindata; int fd; unsigned long bytes_written; - remove(path); + remove(DIRCACHE_FILE); while (thread_enabled) sleep(1); @@ -484,7 +487,7 @@ int dircache_save(const char *path) return -1; logf("Saving directory cache"); - fd = open(path, O_WRONLY | O_CREAT | O_TRUNC); + fd = open(DIRCACHE_FILE, O_WRONLY | O_CREAT | O_TRUNC); maindata.magic = DIRCACHE_MAGIC; maindata.size = dircache_size; @@ -529,6 +532,7 @@ static int dircache_do_rebuild(void) /* Measure how long it takes build the cache. */ start_tick = current_tick; dircache_initializing = true; + remove(DIRCACHE_FILE); #ifdef SIMULATOR pdir = opendir("/"); @@ -633,6 +637,8 @@ int dircache_build(int last_size) return -3; logf("Building directory cache"); + remove(DIRCACHE_FILE); + /* Background build, dircache has been previously allocated */ if (dircache_size > 0) { diff --git a/firmware/include/dircache.h b/firmware/include/dircache.h index 9c3bc68..1483843 100644 --- a/firmware/include/dircache.h +++ b/firmware/include/dircache.h @@ -25,7 +25,8 @@ #define DIRCACHE_RESERVE (1024*64) #define DIRCACHE_LIMIT (1024*1024*6) -#define DIRCACHE_FILE ROCKBOX_DIR "/dircache.dat" +/* FIXME: We should use ROCKBOX_DIR here but it's defined in apps/ */ +#define DIRCACHE_FILE "/.rockbox/dircache.dat" /* Internal structures. */ struct travel_data { @@ -80,8 +81,8 @@ typedef struct { } DIRCACHED; void dircache_init(void); -int dircache_load(const char *path); -int dircache_save(const char *path); +int dircache_load(void); +int dircache_save(void); int dircache_build(int last_size); void* dircache_steal_buffer(long *size); bool dircache_is_enabled(void); |