OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-newlib/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [arc/] [syscalls.c] - Rev 9

Compare with Previous | Blame | View Log

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <_ansi.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <reent.h>
 
_ssize_t
_read_r (struct _reent *r, int fd, void *buf, size_t nbytes)
{
  int err;
  _ssize_t rc;
 
  SYSCALL (SYS_read, rc, err, fd, buf, nbytes);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 
_ssize_t
_write_r (struct _reent *r, int fd, const void *buf, size_t nbytes)
{
  int err;
  _ssize_t rc;
 
  SYSCALL (SYS_write, rc, err, fd, buf, nbytes);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 
/* FIXME: The prototype in <fcntl.h> for open() uses ...,
   but reent.h uses int.  */
 
int
_open_r (struct _reent *r, const char *buf, int flags, int mode)
{
  int rc,err;
#if 0
  int mode;
  va_list ap;
 
  va_start (ap, flags);
  mode = va_arg (ap, int);
  va_end (ap);
#endif
 
  SYSCALL (SYS_open, rc, err, buf, flags, mode);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 
int
_close_r (struct _reent *r, int fd)
{
  int rc,err;
 
  SYSCALL (SYS_close, rc, err, fd, 0, 0);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 
off_t
_lseek_r (struct _reent *r, int fd,  off_t offset, int whence)
{
  int err;
  off_t rc;
 
  SYSCALL (SYS_lseek, rc, err, fd, offset, whence);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 
int
_fstat_r (struct _reent *r, int fd, struct stat *buf)
{
  int rc,err;
 
  SYSCALL (SYS_fstat, rc, err, fd, buf, 0);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 
/* FIXME: Shouldn't this be _exit_r?  */
 
void
_exit (int ret)
{
  int rc,err;
 
  SYSCALL (SYS_exit, rc, err, ret, 0, 0);
 
  /* If that failed, use an infinite loop.  */
  while (1)
    continue;
}
 
time_t
_time (time_t *timer)
{
  return 0;
}
 
int
_creat_r (struct _reent *r, const char *path, int mode)
{
  return _open_r (r, path, O_CREAT | O_TRUNC, mode);
}
 
int
_getpid_r (struct _reent *r)
{
  return 42;
}
 
int
_kill_r (struct _reent *r, int pid, int sig)
{
  int rc,err;
 
  SYSCALL (SYS_kill, rc, err, pid, sig, 0);
  if (err)
    __errno_r (r) = err;
  return rc;
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.