rendered paste bodydiff --git a/apps/plugin.c b/apps/plugin.cindex 246df99..d107e63 100644--- a/apps/plugin.c+++ b/apps/plugin.c@@ -209,7 +209,7 @@ static const struct plugin_api rockbox_api = { /* file */ (open_func)PREFIX(open),- close,+ PREFIX(close), (read_func)PREFIX(read), PREFIX(lseek), (creat_func)PREFIX(creat),diff --git a/firmware/include/file.h b/firmware/include/file.hindex 9a94e91..ee3bf50 100644--- a/firmware/include/file.h+++ b/firmware/include/file.h@@ -57,6 +57,7 @@ #define lseek(x,y,z) sim_lseek(x,y,z) #define read(x,y,z) sim_read(x,y,z) #define write(x,y,z) sim_write(x,y,z)+#define close(x) sim_close(x) #endif typedef int (*open_func)(const char* pathname, int flags);diff --git a/uisimulator/common/io.c b/uisimulator/common/io.cindex 73eda23..7a7c380 100644--- a/uisimulator/common/io.c+++ b/uisimulator/common/io.c@@ -45,6 +45,7 @@ #endif #define MAX_PATH 260+#define MAX_OPEN_FILES 11 #include <fcntl.h> #include <SDL.h>@@ -125,6 +126,7 @@ extern int _wrmdir(const wchar_t*); #define CLOSEDIR(a) (closedir)(a) #define STAT(a,b) (stat)(a,b) #define OPEN(a,b,c) (open)(a,b,c)+#define CLOSE(x) (close)(x) #define REMOVE(a) (remove)(a) #define RENAME(a,b) (rename)(a,b) @@ -138,6 +140,8 @@ void dircache_rename(const char *oldpath, const char *newpath); #define SIMULATOR_ARCHOS_ROOT "archos" +static int num_openfiles = 0;+ struct sim_dirent { unsigned char d_name[MAX_PATH]; int attribute;@@ -387,23 +391,41 @@ int sim_open(const char *name, int o) { char buffer[MAX_PATH]; /* sufficiently big */ int opts = rockbox2sim(o);+ int ret; #ifndef __PCTOOL__- if(name[0] == '/') + if(name[0] == '/') { snprintf(buffer, sizeof(buffer), "%s%s", SIMULATOR_ARCHOS_ROOT, name); debugf("We open the real file '%s'\n", buffer);- return OPEN(buffer, opts, 0666);+ if (num_openfiles < MAX_OPEN_FILES)+ {+ ret = OPEN(buffer, opts, 0666);+ if (ret >= 0) num_openfiles++;+ return ret;+ } }- + fprintf(stderr, "WARNING, bad file name lacks slash: %s\n", name); return -1; #else- return OPEN(name, opts, 0666);+ if (num_openfiles < MAX_OPEN_FILES)+ {+ ret = OPEN(buffer, opts, 0666);+ if (ret >= 0) num_openfiles++;+ return ret;+ } #endif- +}++int sim_close(int fd)+{+ int ret;+ ret = CLOSE(fd);+ if (ret == 0) num_openfiles--;+ return ret; } int sim_creat(const char *name)