Ejemplo n.º 1
0
_WCRTLINK int chsize( int hid, long size )
{
    long        curOffset;
    long        rc;
    __file_handle *fh;

    __handle_check( hid, -1 );
    fh = (__file_handle*) __getOSHandle( hid );

    _AccessFileH( hid );
    
    curOffset = __lseek( hid, 0L, SEEK_CUR );     /* get current offset */

    rc = set_file_size(fh->name, size);
     
    if(rc !=0 )
    {
      _ReleaseFileH( hid );
      if(rc==8)
        __set_errno( ENOSPC );
      else
        __set_errno( EACCES );
      return -1;
    };     

    if( curOffset > size ) curOffset = size;
    curOffset = __lseek( hid, curOffset, SEEK_SET );
    _ReleaseFileH( hid );
    if( curOffset == -1 ) {
        __set_errno(ENOSPC);
        return( -1 );
    }
    return( 0 );
}
Ejemplo n.º 2
0
bool BufferedFile::open(const PathChar *name, const char *mode)
{
  set_file_pointer(OsFile_open(name, mode));
  OsFile_Handle fh = file_pointer();
  set_file_size(fh == NULL ? 0 : OsFile_length(fh));
  return (fh != NULL);
}
Ejemplo n.º 3
0
void BufferedFile::init(Buffer *data, int buffer_size,
                        int file_size, int buffer_count)
{
  // initialize the buffer
  init();
  set_file_pos(buffer_count);
  set_count(buffer_count);
  set_data_buffer(data);
  set_buffer_size(buffer_size);
  set_file_size(file_size);
}
Ejemplo n.º 4
0
int BufferedFile::close()
{
  if (file_pointer() != NULL) { 
    int result = OsFile_close(file_pointer());
    set_file_pointer(0);
    set_file_size(0);
    set_file_pos(0);
    set_index(0);
    set_count(0);
    return result;
  } else {
    return -1;
  }
}
Ejemplo n.º 5
0
//////////////////////////////////////////////////////////////////////////
// upload
void UploadTask::RunImp()
{
	set_timeout(-1);
	set_is_upload(true);
	set_http_method(HTTP_METHOD_PUT);

	std::string uri_str = uri();
	std::string buckname = CString2string(_buckname);
	buckname = MultiByteToUtf8(buckname);
	std::string folderfile = CString2string(_filename);
	folderfile = MultiByteToUtf8(folderfile);
	set_uri(uri_str.append(URLEncode(buckname) + "/" + URLEncode(folderfile)));

	set_file_name(CString2string(_localpath));
	set_file_begin_pos(0);
	set_file_size(-1);
}
Ejemplo n.º 6
0
static uint32
disk_set_info(IRP * irp)
{
	FILE_INFO *finfo;
	uint32 status;
	uint64 len;
	char * buf;
	int size;
	char * fullpath;
	struct stat file_stat;
	struct utimbuf tvs;
	int mode;
	uint32 attr;
	time_t t;

	LLOGLN(10, ("disk_set_info: class=%d id=%d", irp->infoClass, irp->fileID));
	finfo = disk_get_file_info(irp->dev, irp->fileID);
	if (finfo == NULL)
	{
		LLOGLN(0, ("disk_set_info: invalid file id"));
		return RD_STATUS_INVALID_HANDLE;
	}

	status = RD_STATUS_SUCCESS;

	switch (irp->infoClass)
	{
		case FileBasicInformation:
			if (stat(finfo->fullpath, &file_stat) != 0)
				return get_error_status();

			/* Change file time */
			tvs.actime = file_stat.st_atime;
			tvs.modtime = file_stat.st_mtime;
			t = get_system_filetime(GET_UINT64(irp->inputBuffer, 8)); /* LastAccessTime */
			if (t > 0)
				tvs.actime = t;
			t = get_system_filetime(GET_UINT64(irp->inputBuffer, 16)); /* LastWriteTime */
			if (t > 0)
				tvs.modtime = t;
			utime(finfo->fullpath, &tvs);

			/* Change read-only flag */
			attr = GET_UINT32(irp->inputBuffer, 32);
			if (attr == 0)
				break;
			mode = file_stat.st_mode;
			if (attr & FILE_ATTRIBUTE_READONLY)
				mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
			else
				mode |= S_IWUSR;
			mode &= 0777;
			chmod(finfo->fullpath, mode);
			break;

		case FileEndOfFileInformation:
		case FileAllocationInformation:
			len = GET_UINT64(irp->inputBuffer, 0);
			set_file_size(finfo->file, len);
			break;

		case FileDispositionInformation:
			/* Delete on close */
			finfo->delete_pending = 1;
			break;

		case FileRenameInformation:
			//replaceIfExists = GET_UINT8(irp->inputBuffer, 0); /* ReplaceIfExists */
			//rootDirectory = GET_UINT8(irp->inputBuffer, 1); /* RootDirectory */
			len = GET_UINT32(irp->inputBuffer, 2);
			size = len * 2;
			buf = malloc(size);
			memset(buf, 0, size);
			freerdp_get_wstr(buf, size, irp->inputBuffer + 6, len);
			fullpath = disk_get_fullpath(irp->dev, buf);
			free(buf);
			LLOGLN(10, ("disk_set_info: rename %s to %s", finfo->fullpath, fullpath));
			if (rename(finfo->fullpath, fullpath) == 0)
			{
				free(finfo->fullpath);
				finfo->fullpath = fullpath;
			}
			else
			{
				free(fullpath);
				return get_error_status();
			}
			break;

		default:
			LLOGLN(0, ("disk_set_info: invalid info class"));
			status = RD_STATUS_NOT_SUPPORTED;
			break;
	}

	return status;
}
Ejemplo n.º 7
0
void DownloadTask::handle_trans_bytes( uint64 trans_bytes, uint64 total )
{
	set_file_size(total);
	_speed_calc.add_bytes(trans_bytes - _trans_total);
	_trans_total = trans_bytes;
}
Ejemplo n.º 8
0
 std::unique_ptr<osmium::io::Decompressor> create_decompressor(osmium::io::file_compression compression, int fd) const {
     const auto callbacks = find_callbacks(compression);
     auto p = std::unique_ptr<osmium::io::Decompressor>(std::get<1>(callbacks)(fd));
     p->set_file_size(osmium::util::file_size(fd));
     return p;
 }