Beispiel #1
0
static _fpos_t
funseeker (struct _reent *ptr,
       void *cookie,
       _fpos_t off,
       int whence)
{
  funcookie *c = (funcookie *) cookie;
#ifndef __LARGE64_FILES
  fpos_t result;
  errno = 0;
  if ((result = c->seekfn (c->cookie, (fpos_t) off, whence)) < 0 && errno)
    __errno_r(ptr) = errno;
#else /* __LARGE64_FILES */
  _fpos64_t result;
  errno = 0;
  if ((result = c->seekfn (c->cookie, (_fpos64_t) off, whence)) < 0 && errno)
    __errno_r(ptr) = errno;
  else if ((_fpos_t)result != result)
    {
      __errno_r(ptr) = EOVERFLOW;
      result = -1;
    }
#endif /* __LARGE64_FILES */
  return result;
}
Beispiel #2
0
int 
_raise_r (struct _reent *ptr,
     int sig)
{
  _sig_func_ptr func;

  if (sig < 0 || sig >= NSIG)
    {
      __errno_r(ptr) = EINVAL;
      return -1;
    }

  if (ptr->_sig_func == NULL)
    func = SIG_DFL;
  else
    func = ptr->_sig_func[sig];

  if (func == SIG_DFL)
    return _kill_r (ptr, _getpid_r (ptr), sig);
  else if (func == SIG_IGN)
    return 0;
  else if (func == SIG_ERR)
    {
      __errno_r(ptr) = EINVAL;
      return 1;
    }
  else
    {
      ptr->_sig_func[sig] = SIG_DFL;
      func (sig);
      return 0;
    }
}
Beispiel #3
0
FILE *
_tmpfile_r (struct _reent *ptr)
{
  FILE *fp;
  int e;
  char *f;
  char buf[L_tmpnam];
  int fd;

  do
    {
      if ((f = _tmpnam_r (ptr, buf)) == NULL)
	return NULL;
      fd = _open_r (ptr, f, O_RDWR | O_CREAT | O_EXCL | O_BINARY,
		    S_IRUSR | S_IWUSR);
    }
  while (fd < 0 && __errno_r(ptr) == EEXIST);
  if (fd < 0)
    return NULL;
  fp = _fdopen_r (ptr, fd, "wb+");
  e = __errno_r(ptr);
  if (!fp)
    _close_r (ptr, fd);
  (void) _remove_r (ptr, f);
  __errno_r(ptr) = e;
  return fp;
}
Beispiel #4
0
int _write_r(struct _reent *r, int file, char * ptr, int len)
{
  int n;
  (void)r;
  //(void)file;
  (void)ptr;
#if defined(STDOUT_SD)
  if (file != 1) {
    __errno_r(r) = EINVAL;
    return -1;
  }
  sdWrite(&STDOUT_SD, (uint8_t *)ptr, (size_t)len);
#endif
  switch (file) {
      case 1: /*stdout*/
      case 2: /* stderr */
          for (n = 0; n < len; n++) {
        	  chprintf((BaseSequentialStream *)&itm_port, "%c", *ptr++);
          }
          break;
      default:
          errno = EBADF;
          return -1;
  }
  return len;
}
Beispiel #5
0
size_t
_mbrtowc_r (struct _reent *ptr,
	wchar_t *pwc,
	const char *s,
	size_t n,
	mbstate_t *ps)
{
  int retval = 0;

#ifdef _MB_CAPABLE
  if (ps == NULL)
    {
      _REENT_CHECK_MISC(ptr);
      ps = &(_REENT_MBRTOWC_STATE(ptr));
    }
#endif

  if (s == NULL)
    retval = __MBTOWC (ptr, NULL, "", 1, ps);
  else
    retval = __MBTOWC (ptr, pwc, s, n, ps);

  if (retval == -1)
    {
      ps->__count = 0;
      __errno_r(ptr) = EILSEQ;
      return (size_t)(-1);
    }
  else
    return (size_t)retval;
}
Beispiel #6
0
int _read_r(struct _reent *r, int file, char * ptr, int len)
{
  (void)r;
  (void)file;
  (void)ptr;
  (void)len;
  __errno_r(r) = EINVAL;
  return -1;
}
Beispiel #7
0
int esp_vfs_rename(struct _reent *r, const char *src, const char *dst)
{
    const vfs_entry_t* vfs = get_vfs_for_path(src);
    if (vfs == NULL) {
        __errno_r(r) = ENOENT;
        return -1;
    }
    const vfs_entry_t* vfs_dst = get_vfs_for_path(dst);
    if (vfs != vfs_dst) {
        __errno_r(r) = EXDEV;
        return -1;
    }
    const char* src_within_vfs = translate_path(vfs, src);
    const char* dst_within_vfs = translate_path(vfs, dst);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, rename, src_within_vfs, dst_within_vfs);
    return ret;
}
Beispiel #8
0
caddr_t _sbrk(struct _reent *r, int incr)
{
#if CH_CFG_USE_MEMCORE
  void *p;

  chDbgCheck(incr >= 0);
  p = chHeapAlloc(NULL, (size_t)incr);
  if (p == NULL) {
    __errno_r(r) = ENOMEM;
    return (caddr_t)-1;
  }
  return (caddr_t)p;
#else
  (void)incr;
  __errno_r(r) = ENOMEM;
  return (caddr_t)-1;
#endif
}
Beispiel #9
0
int _read_r(struct _reent *r, int file, char * ptr, int len)
{
  (void)r;
#if defined(STDIN_SD)
  if (!len || (file != 0)) {
    __errno_r(r) = EINVAL;
    return -1;
  }
  len = sdRead(&STDIN_SD, (uint8_t *)ptr, (size_t)len);
  return len;
#else
  (void)file;
  (void)ptr;
  (void)len;
  __errno_r(r) = EINVAL;
  return -1;
#endif
}
Beispiel #10
0
int esp_vfs_link(struct _reent *r, const char* n1, const char* n2)
{
    const vfs_entry_t* vfs = get_vfs_for_path(n1);
    if (vfs == NULL) {
        __errno_r(r) = ENOENT;
        return -1;
    }
    const vfs_entry_t* vfs2 = get_vfs_for_path(n2);
    if (vfs != vfs2) {
        __errno_r(r) = EXDEV;
        return -1;
    }
    const char* path1_within_vfs = translate_path(vfs, n1);
    const char* path2_within_vfs = translate_path(vfs, n2);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, link, path1_within_vfs, path2_within_vfs);
    return ret;
}
Beispiel #11
0
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;
}
Beispiel #12
0
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;
}
Beispiel #13
0
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;
}
Beispiel #14
0
caddr_t _sbrk_r(struct _reent *r, int incr)
{
#if CH_USE_MEMCORE
  void *p;

  chDbgCheck(incr > 0, "_sbrk_r");

  (void)r;
  p = chCoreAlloc((size_t)incr);
  if (p == NULL) {
    __errno_r(r) = ENOMEM;
    return (caddr_t)-1;
  }
  return (caddr_t)p;
#else
  __errno_r(r) = ENOMEM;
  return (caddr_t)-1;
#endif
}
Beispiel #15
0
off_t __lseek(struct _reent *r, int fd, off_t offset, int whence) {
    register struct filedesc *fdp = p_fd;
    register struct file *fp;
    int error;

    mtx_lock(&fd_mtx);
    if ((u_int)fd >= fdp->fd_nfiles ||
        (fp = fdp->fd_ofiles[fd]) == NULL) {
        mtx_unlock(&fd_mtx);
        __errno_r(r) = EBADF;
        return -1;
    }
    mtx_unlock(&fd_mtx);

    if (fp->f_type != DTYPE_VNODE) {
        __errno_r(r) = ESPIPE;
        return -1;
    }
    
    switch (whence) {
        case L_INCR:
            fp->f_offset += offset;
            break;
        case L_XTND:
//            fp->f_offset = offset + ((FIL *)fp->f_fs)->fsize;              
            break;
        case L_SET:
            fp->f_offset = offset;
            break;
        default:
            __errno_r(r) = EINVAL;
            return -1;
    }
    
    error = (*fp->f_ops->fo_seek)(fp, offset, whence);
    if (error){
        __errno_r(r) = error;
        return -1;
    }

    return fp->f_offset;
}
Beispiel #16
0
_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;
}
Beispiel #17
0
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;
}
Beispiel #18
0
struct dirent* readdir(DIR* pdir)
{
    const vfs_entry_t* vfs = get_vfs_for_fd(pdir->dd_vfs_idx);
    struct _reent* r = __getreent();
    if (vfs == NULL) {
       __errno_r(r) = EBADF;
        return NULL;
    }
    struct dirent* ret;
    CHECK_AND_CALLP(ret, r, vfs, readdir, pdir);
    return ret;
}
Beispiel #19
0
off_t esp_vfs_lseek(struct _reent *r, int fd, off_t size, int mode)
{
    const vfs_entry_t* vfs = get_vfs_for_fd(fd);
    if (vfs == NULL) {
        __errno_r(r) = EBADF;
        return -1;
    }
    int local_fd = translate_fd(vfs, fd);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, lseek, local_fd, size, mode);
    return ret;
}
Beispiel #20
0
int esp_vfs_unlink(struct _reent *r, const char *path)
{
    const vfs_entry_t* vfs = get_vfs_for_path(path);
    if (vfs == NULL) {
        __errno_r(r) = ENOENT;
        return -1;
    }
    const char* path_within_vfs = translate_path(vfs, path);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, unlink, path_within_vfs);
    return ret;
}
Beispiel #21
0
ssize_t esp_vfs_read(struct _reent *r, int fd, void * dst, size_t size)
{
    const vfs_entry_t* vfs = get_vfs_for_fd(fd);
    if (vfs == NULL) {
        __errno_r(r) = EBADF;
        return -1;
    }
    int local_fd = translate_fd(vfs, fd);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, read, local_fd, dst, size);
    return ret;
}
Beispiel #22
0
int esp_vfs_fstat(struct _reent *r, int fd, struct stat * st)
{
    const vfs_entry_t* vfs = get_vfs_for_fd(fd);
    if (vfs == NULL) {
        __errno_r(r) = EBADF;
        return -1;
    }
    int local_fd = translate_fd(vfs, fd);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, fstat, local_fd, st);
    return ret;
}
Beispiel #23
0
void *
_sbrk_r (struct _reent *ptr,
     ptrdiff_t incr)
{
  char *ret;
  void *_sbrk(ptrdiff_t);

  errno = 0;
  if ((ret = (char *)(_sbrk (incr))) == (void *) -1 && errno != 0)
    __errno_r(ptr) = errno;
  return ret;
}
Beispiel #24
0
int _read_r(struct _reent *r, int file, char *ptr, int len)
{
  char		i = 0;
  uint8_t	buffersize = len;
  //char	ascii;
	
  (void)r;
#if defined(STDIN_SD)
  if (!len || (file != 0)) {
    __errno_r(r) = EINVAL;
    return -1;
  }
  len = sdRead(&STDIN_SD, (uint8_t *)ptr, (size_t)len);
  return len;
#else
  //chprintf((BaseSequentialStream *)&itm_port, "file descript: %i\n", file);
  
  if (!len || (file == -1)) {
    __errno_r(r) = EBADF;
    return -1;
  }else {
		do{
			if(lcfg_table[file].data[i] != EOF){
				*ptr = lcfg_table[file].data[i++];
				//ascii = *ptr;
				//chprintf((BaseSequentialStream *)&itm_port, "character: %c in file: %i with len: %i\n", ascii, file, len);
			
				ptr++;
			}

			len--;
		}while((len > 0) && (lcfg_table[file].data[i] != EOF));
		
		return buffersize - len;
	}

  __errno_r(r) = EINVAL;
  return -1;
#endif
}
Beispiel #25
0
void *_sbrk_r(struct _reent *r, ptrdiff_t incr) {
#if CH_USE_MEMCORE
	void *p = chCoreAlloc((size_t) incr);
	if (p == NULL) {
		r->_errno = ENOMEM;
		return (void*) -1;
	}
	return (void*) p;
#else
	__errno_r(r) = ENOMEM;
	return (caddr_t)-1;
#endif
}
Beispiel #26
0
int rmdir(const char* name)
{
    const vfs_entry_t* vfs = get_vfs_for_path(name);
    struct _reent* r = __getreent();
    if (vfs == NULL) {
        __errno_r(r) = ENOENT;
        return -1;
    }
    const char* path_within_vfs = translate_path(vfs, name);
    int ret;
    CHECK_AND_CALL(ret, r, vfs, rmdir, path_within_vfs);
    return ret;
}
Beispiel #27
0
_off_t
_lseek_r (struct _reent *ptr,
     int fd,
     _off_t pos,
     int whence)
{
  _off_t ret;

  errno = 0;
  if ((ret = _lseek (fd, pos, whence)) == (_off_t) -1 && errno != 0)
    __errno_r(ptr) = errno;
  return ret;
}
Beispiel #28
0
int __fstat(struct _reent *r, int fd, struct stat *sb) {
    register struct file *fp;
    register struct filedesc *fdp = p_fd;
    int res;

    mtx_lock(&fd_mtx);
    if ((u_int)fd >= fdp->fd_nfiles ||
        (fp = fdp->fd_ofiles[fd]) == NULL) {
        mtx_unlock(&fd_mtx);
        __errno_r(r) = EBADF;
        return -1;
    }
    mtx_unlock(&fd_mtx);
    
    res = (fp->f_ops->fo_stat)(fp, sb);
    if (res > 0) {
        __errno_r(r) = res;
        return -1;
    }
    
    return (0);
}
Beispiel #29
0
static _READ_WRITE_RETURN_TYPE
funwriter (struct _reent *ptr,
       void *cookie,
       const char *buf,
       _READ_WRITE_BUFSIZE_TYPE n)
{
  int result;
  funcookie *c = (funcookie *) cookie;
  errno = 0;
  if ((result = c->writefn (c->cookie, buf, n)) < 0 && errno)
    __errno_r(ptr) = errno;
  return result;
}
Beispiel #30
0
static _fpos64_t
funseeker64 (struct _reent *ptr,
       void *cookie,
       _fpos64_t off,
       int whence)
{
  _fpos64_t result;
  funcookie *c = (funcookie *) cookie;
  errno = 0;
  if ((result = c->seekfn (c->cookie, off, whence)) < 0 && errno)
    __errno_r(ptr) = errno;
  return result;
}