NTSTATUS err;
IO_STATUS_BLOCK file_IoStatusBlock;
LARGE_INTEGER file_offset;
+GnomeVFSFileInfo file_info;
+GnomeVFSFileSize endoffile_wanted;
+GnomeVFSResult errvfsresult;
if (CAPTIVE_IS_SANDBOX_PARENT())
return captive_sandbox_parent_file_write(captive_file_object,buffer,num_bytes,bytes_written_return);
g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
+ if ((GnomeVFSFileOffset)(captive_file_object->offset+num_bytes) < captive_file_object->offset)
+ return GNOME_VFS_ERROR_TOO_BIG;
+ endoffile_wanted=captive_file_object->offset+num_bytes;
+ if (GNOME_VFS_OK!=(errvfsresult=captive_file_file_info_get(captive_file_object,&file_info)))
+ return errvfsresult;
+ if (file_info.size<endoffile_wanted) {
+ if (GNOME_VFS_OK!=(errvfsresult=captive_file_truncate(captive_file_object,endoffile_wanted)))
+ return errvfsresult;
+ }
+
file_offset.QuadPart=captive_file_object->offset;
err=NtWriteFile(
captive_file_object->file_Handle, /* FileHandle */