summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--uisimulator/common/io.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/uisimulator/common/io.c b/uisimulator/common/io.c
index 0d680e0..fd30dc6 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)