Exemplo n.º 1
0
static int file_open_append(scamper_file_t *sf)
{
  struct stat sb;

  if(fstat(sf->fd, &sb) != 0)
    return -1;

  if(sb.st_size == 0)
    {
      if(sf->type == SCAMPER_FILE_WARTS)
	return handlers[sf->type].init_write(sf);
      else if(sf->type == SCAMPER_FILE_TEXT || sf->type == SCAMPER_FILE_JSON)
	return 0;
      return -1;
    }

  /* can't append to pipes */
  if((sb.st_mode & S_IFIFO) != 0)
    return -1;

  sf->type = file_type_detect(sf);
  if(handlers[sf->type].init_append != NULL)
    return handlers[sf->type].init_append(sf);
  else if(sf->type != SCAMPER_FILE_TEXT && sf->type != SCAMPER_FILE_JSON)
    return -1;

  return 0;
}
Exemplo n.º 2
0
static int file_open_read(scamper_file_t *sf)
{
  struct stat sb;

  if(fstat(sf->fd, &sb) != 0)
    {
      return -1;
    }

  if(sb.st_size != 0 && (sb.st_mode & S_IFIFO) == 0 &&
     (sf->type = file_type_detect(sf)) == SCAMPER_FILE_NONE)
    {
      return -1;
    }

  if(handlers[sf->type].init_read == NULL)
    return -1;

  return handlers[sf->type].init_read(sf);
}
Exemplo n.º 3
0
static int file_open_append(scamper_file_t *sf)
{
  struct stat sb;

  if(fstat(sf->fd, &sb) != 0)
    {
      return -1;
    }

  if(sb.st_size == 0)
    {
      /* can only write warts and text files */
      if(sf->type == SCAMPER_FILE_WARTS)
	{
	  return handlers[sf->type].init_write(sf);
	}
      else if(sf->type == SCAMPER_FILE_TEXT)
	{
	  return 0;
	}
      return -1;
    }

  /* can't append to pipes */
  if((sb.st_mode & S_IFIFO) != 0)
    {
      return -1;
    }

  sf->type = file_type_detect(sf);
  if(handlers[sf->type].init_append != NULL)
    {
      return handlers[sf->type].init_append(sf);
    }
  else if(sf->type != SCAMPER_FILE_WARTS && sf->type != SCAMPER_FILE_TEXT)
    {
      return -1;
    }

  return 0;
}