* emul_netbsd.c (do_open): Translate the flag parameter to the
open syscall to the numbers supported by the host.
This commit is contained in:
parent
098f2ec3f5
commit
428e1889bc
2 changed files with 24 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2001-01-15 Geoffrey Keating <geoffk@redhat.com>
|
||||
|
||||
* emul_netbsd.c (do_open): Translate the flag parameter to the
|
||||
open syscall to the numbers supported by the host.
|
||||
|
||||
2000-12-12 Geoffrey Keating <geoffk@redhat.com>
|
||||
|
||||
* sim-endian.h: Don't have parameters on macro definitions which
|
||||
|
|
|
@ -386,6 +386,7 @@ do_open(os_emul_data *emul,
|
|||
char *path = emul_read_string(path_buf, path_addr, PATH_MAX, processor, cia);
|
||||
int flags = (int)cpu_registers(processor)->gpr[arg0+1];
|
||||
int mode = (int)cpu_registers(processor)->gpr[arg0+2];
|
||||
int hostflags;
|
||||
int status;
|
||||
|
||||
if (WITH_TRACE && ppc_trace[trace_os_emul])
|
||||
|
@ -393,8 +394,25 @@ do_open(os_emul_data *emul,
|
|||
|
||||
SYS(open);
|
||||
|
||||
/* Do some translation on 'flags' to match it to the host's version. */
|
||||
/* These flag values were taken from the NetBSD 1.4 header files. */
|
||||
if ((flags & 3) == 0)
|
||||
hostflags = O_RDONLY;
|
||||
else if ((flags & 3) == 1)
|
||||
hostflags = O_WRONLY;
|
||||
else
|
||||
hostflags = O_RDWR;
|
||||
if (flags & 0x00000008)
|
||||
hostflags |= O_APPEND;
|
||||
if (flags & 0x00000200)
|
||||
hostflags |= O_CREAT;
|
||||
if (flags & 0x00000400)
|
||||
hostflags |= O_TRUNC;
|
||||
if (flags & 0x00000800)
|
||||
hostflags |= O_EXCL;
|
||||
|
||||
/* Can't combine these statements, cuz open sets errno. */
|
||||
status = open(path, flags, mode);
|
||||
status = open(path, hostflags, mode);
|
||||
emul_write_status(processor, status, errno);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue