Example #1
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;
}
Example #2
0
FILE *devo_fopen(const char *path, const char *mode)
{
    int flags = (mode && *mode == 'w') ? O_CREAT : 0;
    int _mode = flags ? O_WRONLY : O_RDONLY;
        
    long fd = _open_r (NULL, path, flags, _mode);
    fd++;
    return (void *)fd;
}
Example #3
0
int _stat_r(struct _reent *r, const char *path, struct stat *s) {
    int ret, fd;

    /*
     * spiffs has no directories, simulating statting root directory;
     * required for mg_send_http_file.
     */
    if ((strcmp(path, "./") == 0) || (strcmp(path, "/") == 0)) {
        memset(s, 0, sizeof(*s));
        s->st_mode = S_IFDIR;
        return 0;
    }

    fd = _open_r(NULL, path, O_RDONLY, 0);
    if (fd == -1) return -1;
    ret = _fstat_r(NULL, fd, s);
    _close_r(NULL, fd);
    return ret;
}
Example #4
0
int EEPROM_Open (void)
{
    int FileDescriptor, SCL_Freq = EEPROM_SPEED;
	unsigned char EEProm_Addres = EEPROM_ADDRESS;

	/* Search 'i2c0' device in the File Descriptor Table */
    FileDescriptor = _open_r ("i2c0", 0, 0);
    /* If 'i2c0' device found */
    if (FileDescriptor > 0) {
    	/* Get pointer to the DEVICE structure */
        ptr_i2c0 = Device_List[FileDescriptor];
        /* Init i2c0 */
        ptr_i2c0->init ();
        /* Set i2c0 SCL clock frequency */
        ptr_i2c0->ioctl (I2C_SET_SPEED, &SCL_Freq);
        /* Set EEPROM Slave Address */
        ptr_i2c0->ioctl (I2C_SET_ADDRESS, &EEProm_Addres);
    }
    return FileDescriptor;
}
Example #5
0
int open( const char *name, int flags, mode_t mode )
{
    return _open_r( _REENT, name, flags, 0 );
}
Example #6
0
static int
_gettemp (struct _reent *ptr,
       char *path,
       register int *doopen,
       int domkdir,
       size_t suffixlen,
       int flags)
{
  register char *start, *trv;
  char *end;
#ifdef __USE_INTERNAL_STAT64
  struct stat64 sbuf;
#else
  struct stat sbuf;
#endif
  unsigned int pid;

  pid = _getpid_r (ptr);
  for (trv = path; *trv; ++trv)		/* extra X's get set to 0's */
    continue;
  if (trv - path < suffixlen)
    {
      ptr->_errno = EINVAL;
      return 0;
    }
  trv -= suffixlen;
  end = trv;
  while (path < trv && *--trv == 'X')
    {
      *trv = (pid % 10) + '0';
      pid /= 10;
    }
  if (end - trv < 6)
    {
      ptr->_errno = EINVAL;
      return 0;
    }

  /*
   * Check the target directory; if you have six X's and it
   * doesn't exist this runs for a *very* long time.
   */

  for (start = trv + 1;; --trv)
    {
      if (trv <= path)
	break;
      if (*trv == '/')
	{
	  *trv = '\0';
#ifdef __USE_INTERNAL_STAT64
	  if (_stat64_r (ptr, path, &sbuf))
#else
	  if (_stat_r (ptr, path, &sbuf))
#endif
	    return (0);
	  if (!(sbuf.st_mode & S_IFDIR))
	    {
	      ptr->_errno = ENOTDIR;
	      return (0);
	    }
	  *trv = '/';
	  break;
	}
    }

  for (;;)
    {
#if !defined _ELIX_LEVEL || _ELIX_LEVEL >= 4
      if (domkdir)
	{
#ifdef HAVE_MKDIR
	  if (_mkdir_r (ptr, path, 0700) == 0)
	    return 1;
	  if (ptr->_errno != EEXIST)
	    return 0;
#else /* !HAVE_MKDIR */
	  ptr->_errno = ENOSYS;
	  return 0;
#endif /* !HAVE_MKDIR */
	}
      else
#endif /* _ELIX_LEVEL */
      if (doopen)
	{
	  if ((*doopen = _open_r (ptr, path, O_CREAT | O_EXCL | O_RDWR | flags,
				  0600)) >= 0)
	    return 1;
	  if (ptr->_errno != EEXIST)
	    return 0;
	}
#ifdef __USE_INTERNAL_STAT64
      else if (_stat64_r (ptr, path, &sbuf))
#else
      else if (_stat_r (ptr, path, &sbuf))
#endif
	return (ptr->_errno == ENOENT ? 1 : 0);

      /* tricky little algorithm for backward compatibility */
      for (trv = start;;)
	{
	  if (trv == end)
	    return 0;
	  if (*trv == 'z')
	    *trv++ = 'a';
	  else
	    {
	      /* Safe, since it only encounters 7-bit characters.  */
	      if (isdigit ((unsigned char) *trv))
		*trv = 'a';
	      else
		++ * trv;
	      break;
	    }
	}
    }
  /*NOTREACHED*/
}
Example #7
0
int
_creat_r (struct _reent *r, const char *path, int mode)
{
  return _open_r (r, path, O_CREAT | O_TRUNC, mode);
}