summaryrefslogtreecommitdiff
path: root/uisimulator/common
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-05-06 17:35:13 +0000
committerThomas Martitz <kugel@rockbox.org>2010-05-06 17:35:13 +0000
commit0a1d7c28b7e9da555d26d489cde2da26e2cc9ca0 (patch)
treea21521e6e4b8fe0131c4d9e8bae6d8cc78125fe9 /uisimulator/common
parentc61e89c0eda126c2c1a4a3983520c35fe30db156 (diff)
downloadrockbox-0a1d7c28b7e9da555d26d489cde2da26e2cc9ca0.tar.gz
rockbox-0a1d7c28b7e9da555d26d489cde2da26e2cc9ca0.zip
Make open() posix compliant api-wise. A few calls (those with O_CREAT) need the additional optional mode parameter so add it. Impact for the core is almost zero, as open() is a wrapper macro for the real open function which doesn't take the variable parameter.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25844 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/common')
-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;