From d49d2e1675f00731d03d5939b0880e62f8d9a440 Mon Sep 17 00:00:00 2001 From: Michael Hohmuth Date: Fri, 15 Apr 2011 21:45:36 +0000 Subject: Better dircache handling in simulator Actually add files to the dircache (as well as removing them) and remove them only when they were found on disk. This matches the native behavior and prevents the dircache from becoming uninitialized when a previously created or nonexisting file is being removed. This typically would happen during a database update. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29715 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/common/io.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'uisimulator/common') diff --git a/uisimulator/common/io.c b/uisimulator/common/io.c index 0d680e0e8a..fd30dc68b6 100644 --- a/uisimulator/common/io.c +++ b/uisimulator/common/io.c @@ -147,6 +147,7 @@ extern int _wrmdir(const wchar_t*); #ifdef HAVE_DIRCACHE +void dircache_add_file(const char *name, long startcluster); void dircache_remove(const char *name); void dircache_rename(const char *oldname, const char *newname); #endif @@ -389,6 +390,10 @@ int sim_open(const char *name, int o, ...) va_start(ap, o); mode_t mode = va_arg(ap, unsigned int); ret = OPEN(get_sim_pathname(name), opts, mode); +#ifdef HAVE_DIRCACHE + if (ret >= 0) + dircache_add_file(name, 0); +#endif va_end(ap); } else @@ -410,7 +415,13 @@ int sim_close(int fd) int sim_creat(const char *name, mode_t mode) { - return OPEN(get_sim_pathname(name), O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, mode); + int ret = OPEN(get_sim_pathname(name), + O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, mode); +#ifdef HAVE_DIRCACHE + if (ret >= 0) + dircache_add_file(name, 0); +#endif + return ret; } ssize_t sim_read(int fd, void *buf, size_t count) @@ -460,10 +471,12 @@ int sim_rmdir(const char *name) int sim_remove(const char *name) { + int ret = REMOVE(get_sim_pathname(name)); #ifdef HAVE_DIRCACHE - dircache_remove(name); + if (ret >= 0) + dircache_remove(name); #endif - return REMOVE(get_sim_pathname(name)); + return ret; } int sim_rename(const char *oldname, const char *newname) -- cgit v1.2.3