diff options
author | Thomas Martitz <kugel@rockbox.org> | 2010-05-06 17:35:13 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2010-05-06 17:35:13 +0000 |
commit | 0a1d7c28b7e9da555d26d489cde2da26e2cc9ca0 (patch) | |
tree | a21521e6e4b8fe0131c4d9e8bae6d8cc78125fe9 /uisimulator/common | |
parent | c61e89c0eda126c2c1a4a3983520c35fe30db156 (diff) | |
download | rockbox-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.c | 22 |
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 | ||
332 | int sim_open(const char *name, int o) | 336 | int 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; |