open.c revision 4c05150d77225cd8be862b006c421d8c045fa71c
1#include <unistd.h>
2#include <fcntl.h>
3#include <stdarg.h>
4
5extern int  __open(const char*, int, int);
6#define O_CREAT_PORTABLE 00000100
7
8static inline int mips_change_flags(int flags) {
9    if (flags & O_CREAT_PORTABLE) {
10        flags &= ~O_CREAT_PORTABLE;
11        flags |= O_CREAT;
12    }
13    return flags;
14}
15
16int open(const char *pathname, int flags, ...) {
17    mode_t  mode = 0;
18    flags = mips_change_flags(flags);
19    flags |= O_LARGEFILE;
20
21    if (flags & O_CREAT) {
22        va_list  args;
23
24        va_start(args, flags);
25        mode = (mode_t) va_arg(args, int);
26        va_end(args);
27    }
28
29    return __open(pathname, flags, mode);
30}
31