+file remove
[captive.git] / src / libcaptive / client / file.c
index c5254e0..0f2bf55 100644 (file)
@@ -326,3 +326,29 @@ GnomeVFSResult captive_file_tell(CaptiveFileObject *captive_file_object,GnomeVFS
        *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;
+}