+file remove
authorshort <>
Sun, 2 Feb 2003 19:28:57 +0000 (19:28 +0000)
committershort <>
Sun, 2 Feb 2003 19:28:57 +0000 (19:28 +0000)
src/client/libcaptive-gnomevfs/gnome-vfs-method.c
src/libcaptive/client/file.c
src/libcaptive/include/captive/client-file.h

index f39e45d..85dd1db 100644 (file)
@@ -233,6 +233,36 @@ CaptiveFileObject *captive_file_object;
 }
 
 
+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)
 {
@@ -381,6 +411,7 @@ GnomeVFSMethod *captive_gnomevfs_method_init(const gchar *fs_path)
        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);
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;
+}
index f4819d1..804846f 100644 (file)
@@ -62,6 +62,7 @@ GnomeVFSResult captive_file_write(CaptiveFileObject *captive_file_object,
 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