summaryrefslogtreecommitdiff
path: root/uisimulator/common/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/common/io.c')
-rw-r--r--uisimulator/common/io.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/uisimulator/common/io.c b/uisimulator/common/io.c
index f794d5fbc3..937c710e06 100644
--- a/uisimulator/common/io.c
+++ b/uisimulator/common/io.c
@@ -106,7 +106,9 @@ extern int _wrmdir(const wchar_t*);
106#define READDIR(a) (_wreaddir)(a) 106#define READDIR(a) (_wreaddir)(a)
107#define CLOSEDIR(a) (_wclosedir)(a) 107#define CLOSEDIR(a) (_wclosedir)(a)
108#define STAT(a,b) (_wstat)(UTF8_TO_OS(a),b) 108#define STAT(a,b) (_wstat)(UTF8_TO_OS(a),b)
109#define OPEN(a,b,c) (_wopen)(UTF8_TO_OS(a),b,c) 109/* empty variable parameter list doesn't work for variadic macros,
110 * so pretend the second parameter is variable too */
111#define OPEN(a,...) (_wopen)(UTF8_TO_OS(a), __VA_ARGS__)
110#define CLOSE(a) (close)(a) 112#define CLOSE(a) (close)(a)
111#define REMOVE(a) (_wremove)(UTF8_TO_OS(a)) 113#define REMOVE(a) (_wremove)(UTF8_TO_OS(a))
112#define RENAME(a,b) (_wrename)(UTF8_TO_OS(a),utf8_to_ucs2(b,convbuf2)) 114#define RENAME(a,b) (_wrename)(UTF8_TO_OS(a),utf8_to_ucs2(b,convbuf2))
@@ -124,7 +126,9 @@ extern int _wrmdir(const wchar_t*);
124#define READDIR(a) (readdir)(a) 126#define READDIR(a) (readdir)(a)
125#define CLOSEDIR(a) (closedir)(a) 127#define CLOSEDIR(a) (closedir)(a)
126#define STAT(a,b) (stat)(a,b) 128#define STAT(a,b) (stat)(a,b)
127#define OPEN(a,b,c) (open)(a,b,c) 129/* empty variable parameter list doesn't work for variadic macros,
130 * so pretend the second parameter is variable too */
131#define OPEN(a, ...) (open)(a, __VA_ARGS__)
128#define CLOSE(x) (close)(x) 132#define CLOSE(x) (close)(x)
129#define REMOVE(a) (remove)(a) 133#define REMOVE(a) (remove)(a)
130#define RENAME(a,b) (rename)(a,b) 134#define RENAME(a,b) (rename)(a,b)
@@ -329,15 +333,23 @@ void sim_closedir(MYDIR *dir)
329 free(dir); 333 free(dir);
330} 334}
331 335
332int sim_open(const char *name, int o) 336int sim_open(const char *name, int o, ...)
333{ 337{
334 int opts = rockbox2sim(o); 338 int opts = rockbox2sim(o);
335 int ret; 339 int ret;
336
337 if (num_openfiles >= MAX_OPEN_FILES) 340 if (num_openfiles >= MAX_OPEN_FILES)
338 return -2; 341 return -2;
339 342
340 ret = OPEN(get_sim_pathname(name), opts, 0666); 343 if (o & O_CREAT)
344 {
345 va_list ap;
346 va_start(ap, o);
347 ret = OPEN(get_sim_pathname(name), opts, va_arg(ap, mode_t));
348 va_end(ap);
349 }
350 else
351 ret = OPEN(get_sim_pathname(name), opts);
352
341 if (ret >= 0) 353 if (ret >= 0)
342 num_openfiles++; 354 num_openfiles++;
343 return ret; 355 return ret;