#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
+#include <errno.h>
#include <sys/errno.h>
#include <sys/param.h>
#include <sys/time.h>
#if WITH_NetBSD_HOST /* here NetBSD as that is what we're emulating */
#include <sys/syscall.h> /* FIXME - should not be including this one */
#include <sys/sysctl.h>
+#include <sys/mount.h>
extern int getdirentries(int fd, char *buf, int nbytes, long *basep);
#else
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])
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);
}
natural_word how = cpu_registers(processor)->gpr[arg0];
unsigned_word set = cpu_registers(processor)->gpr[arg0+1];
unsigned_word oset = cpu_registers(processor)->gpr[arg0+2];
+#ifdef SYS_sigprocmask
SYS(sigprocmask);
+#endif
if (WITH_TRACE && ppc_trace[trace_os_emul])
printf_filtered ("%ld, 0x%ld, 0x%ld", (long)how, (long)set, (long)oset);
char *path = emul_read_string(path_buf, path_addr, PATH_MAX, processor, cia);
struct stat buf;
int status;
+#ifdef SYS_stat
SYS(stat);
+#endif
status = stat(path, &buf);
emul_write_status(processor, status, errno);
if (status == 0)
unsigned_word stat_buf_addr = cpu_registers(processor)->gpr[arg0+1];
struct stat buf;
int status;
+#ifdef SYS_fstat
SYS(fstat);
+#endif
/* Can't combine these statements, cuz fstat sets errno. */
status = fstat(fd, &buf);
emul_write_status(processor, status, errno);
unsigned_word stat_buf_addr = cpu_registers(processor)->gpr[arg0+1];
struct stat buf;
int status;
+#ifdef SYS_lstat
SYS(lstat);
+#endif
/* Can't combine these statements, cuz lstat sets errno. */
status = lstat(path, &buf);
emul_write_status(processor, status, errno);
unsigned_word basep_addr = cpu_registers(processor)->gpr[arg0+3];
long basep;
int status;
+#ifdef SYS_getdirentries
SYS(getdirentries);
+#endif
if (buf_addr != 0 && nbytes >= 0)
buf = zalloc(nbytes);
else