Ejemplo n.º 1
0
ssize_t file_pwrite(file_t* f, const void* buf, size_t size, off_t offset)
{
  populate_mapping(buf, size, PROT_READ);
  long flags = spinlock_lock_irqsave(&file_lock);
  f_lseek(&f->fd, offset);
  uint32_t wsize = 0;
  f_write(&f->fd, buf, size, &wsize);
  spinlock_unlock_irqrestore(&file_lock,flags);
  return wsize;
}
Ejemplo n.º 2
0
long sys_time(void* loc)
{
  uintptr_t t = rdcycle() / CLOCK_FREQ;
  if (loc)
  {
    populate_mapping(loc, long_bytes, PROT_WRITE);
    put_long(loc, 0, t);
  }
  return t;
}
Ejemplo n.º 3
0
int sys_rt_sigaction(int sig, const void* act, void* oact, size_t sssz)
{
  if (oact)
  {
    size_t sz = long_bytes * 3;
    populate_mapping(oact, sz, PROT_WRITE);
    memset(oact, 0, sz);
  }

  return 0;
}
Ejemplo n.º 4
0
ssize_t file_read(file_t* f, void* buf, size_t size)
{
  populate_mapping(buf, size, PROT_WRITE);
  long flags = spinlock_lock_irqsave(&file_lock);
  f_lseek(&f->fd, f->offset);
  uint32_t rsize;
  f_read(&f->fd, buf, size, &rsize);
  f->offset += rsize;
  spinlock_unlock_irqrestore(&file_lock,flags);
  return rsize;
}
Ejemplo n.º 5
0
ssize_t file_pread(file_t* f, void* buf, size_t size, off_t offset)
{
  populate_mapping(buf, size, PROT_WRITE);
  long flags = spinlock_lock_irqsave(&file_lock);
  FRESULT rt = f_lseek(&f->fd, offset);
  if(rt) panic("f_lseek() failed! %d", rt);
  uint32_t rsize = 0;
  f_read(&f->fd, buf, size, &rsize);
  if(rt) panic("f_read() failed! %d", rt);
  spinlock_unlock_irqrestore(&file_lock,flags);
  return rsize;
}
Ejemplo n.º 6
0
long sys_fstatat(int dirfd, const char* name, void* st, int flags)
{
  if(name[0] == '/'){
    return sys_stat(name, st);
  }
  file_t* dir = file_get(dirfd);
  if(dir)
  {
    size_t name_size = strlen(name)+1;
    populate_mapping(st, sizeof(struct stat), PROT_WRITE);
    return frontend_syscall(SYS_fstatat, dir->kfd, (uintptr_t)name, name_size, (uintptr_t)st, flags);
  }
  return -EBADF;
}
Ejemplo n.º 7
0
long sys_getcwd(const char* buf, size_t size)
{
  populate_mapping(buf, size, PROT_WRITE);
  return frontend_syscall(SYS_getcwd, (uintptr_t)buf, size, 0, 0, 0, 0, 0);
}
Ejemplo n.º 8
0
long sys_lstat(const char* name, void* st)
{
  size_t name_size = strlen(name)+1;
  populate_mapping(st, sizeof(struct stat), PROT_WRITE);
  return frontend_syscall(SYS_lstat, (uintptr_t)name, name_size, (uintptr_t)st, 0, 0);
}