}
+GnomeVFSResult captive_gnomevfs_unlink(GnomeVFSMethod *method,
+ GnomeVFSURI *uri,GnomeVFSContext *context)
+{
+GnomeVFSResult errvfsresult;
+CaptiveFileObject *captive_file_object;
+
+ g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+ errvfsresult=captive_gnomevfs_uri_parent_init(uri);
+ g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
+
+ G_LOCK(libcaptive);
+ errvfsresult=captive_file_new_open(&captive_file_object,uri->text,
+ (GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_WRITE | GNOME_VFS_OPEN_RANDOM)); /* mode; is it OK? */
+ G_UNLOCK(libcaptive);
+ if (errvfsresult!=GNOME_VFS_OK)
+ return errvfsresult;
+
+ G_LOCK(libcaptive);
+ errvfsresult=captive_file_remove(captive_file_object);
+ G_UNLOCK(libcaptive);
+
+ G_LOCK(libcaptive);
+ g_object_unref(captive_file_object);
+ G_UNLOCK(libcaptive);
+
+ return errvfsresult;
+}
+
+
static GnomeVFSResult captive_gnomevfs_close(GnomeVFSMethod *method,
GnomeVFSMethodHandle *method_handle,GnomeVFSContext *context)
{
GnomeVFSMethod_static.seek =captive_gnomevfs_seek;
GnomeVFSMethod_static.tell =captive_gnomevfs_tell;
GnomeVFSMethod_static.create =captive_gnomevfs_create; /* mandatory */
+ GnomeVFSMethod_static.unlink =captive_gnomevfs_unlink;
GnomeVFSMethod_static.is_local =captive_gnomevfs_is_local; /* mandatory */
GnomeVFSMethod_static.get_file_info =captive_gnomevfs_get_file_info; /* mandatory */
G_UNLOCK(GnomeVFSMethod_static);
*offset_return=captive_file_object->offset;
return GNOME_VFS_OK;
}
+
+
+GnomeVFSResult captive_file_remove(CaptiveFileObject *captive_file_object)
+{
+NTSTATUS err;
+FILE_DISPOSITION_INFORMATION FileDispositionInformation_struct;
+IO_STATUS_BLOCK file_IoStatusBlock;
+GnomeVFSResult errvfsresult;
+
+ g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+ g_return_val_if_fail(captive_file_object->file_Handle!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+ FileDispositionInformation_struct.DoDeleteFile=TRUE;
+
+ err=NtSetInformationFile(
+ captive_file_object->file_Handle, /* FileHandle */
+ &file_IoStatusBlock, /* IoStatusBlock */
+ &FileDispositionInformation_struct, /* FileInformation */
+ sizeof(FileDispositionInformation_struct), /* Length */
+ FileDispositionInformation); /* FileInformationClass */
+ if (GNOME_VFS_OK!=(errvfsresult=captive_NTSTATUS_to_GnomeVFSResult(err)))
+ return errvfsresult;
+ g_return_val_if_fail(NT_SUCCESS(err),GNOME_VFS_ERROR_GENERIC);
+
+ return GNOME_VFS_OK;
+}
GnomeVFSResult captive_file_seek
(CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset);
GnomeVFSResult captive_file_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return);
+GnomeVFSResult captive_file_remove(CaptiveFileObject *captive_file_object);
G_END_DECLS