summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-12-22 09:11:09 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-12-22 09:11:09 +0000
commitc8a9ca748d0a3b1961f6577159a9de8ac4af60e7 (patch)
tree16f719514542087f5a2e0d5bac8d30b4fce5910a /firmware
parent7258b5e51a78e4d990bf1225c5893dc4b78d78b7 (diff)
downloadrockbox-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.c16
-rw-r--r--firmware/include/dircache.h7
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);