All pastes #730798 Raw Edit

sim_limit_fd.patch

public diff v1 · immutable
·published 2007-10-09 15:05 UTC
rendered paste body
diff --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)