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