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

index bffc67a..f39e45d 100644 (file)
@@ -159,6 +159,37 @@ CaptiveDirectoryObject *captive_directory_object;
 }
 
 
+static GnomeVFSResult captive_gnomevfs_remove_directory(GnomeVFSMethod *method,
+               GnomeVFSURI *uri,GnomeVFSContext *context)
+{
+GnomeVFSResult errvfsresult;
+CaptiveDirectoryObject *captive_directory_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_directory_new_open(
+                       &captive_directory_object,      /* captive_directory_object_return */
+                       uri->text);     /* pathname */
+       G_UNLOCK(libcaptive);
+       if (errvfsresult!=GNOME_VFS_OK)
+               return errvfsresult;
+
+       G_LOCK(libcaptive);
+       errvfsresult=captive_directory_remove(captive_directory_object);
+       G_UNLOCK(libcaptive);
+
+       G_LOCK(libcaptive);
+       g_object_unref(captive_directory_object);
+       G_UNLOCK(libcaptive);
+
+       return errvfsresult;
+}
+
+
 static GnomeVFSResult captive_gnomevfs_open(GnomeVFSMethod *method,
                GnomeVFSMethodHandle **method_handle_return,GnomeVFSURI *uri,GnomeVFSOpenMode mode,GnomeVFSContext *context)
 {
@@ -338,19 +369,20 @@ GnomeVFSMethod *captive_gnomevfs_method_init(const gchar *fs_path)
        G_LOCK(GnomeVFSMethod_static);
        CAPTIVE_MEMZERO(&GnomeVFSMethod_static);
        GnomeVFSMethod_static.method_table_size=sizeof(GnomeVFSMethod_static);
-       GnomeVFSMethod_static.open_directory =captive_gnomevfs_open_directory;
-       GnomeVFSMethod_static.close_directory=captive_gnomevfs_close_directory;
-       GnomeVFSMethod_static.read_directory =captive_gnomevfs_read_directory;
-       GnomeVFSMethod_static.make_directory =captive_gnomevfs_make_directory;
-       GnomeVFSMethod_static.open           =captive_gnomevfs_open;    /* mandatory */
-       GnomeVFSMethod_static.close          =captive_gnomevfs_close;
-       GnomeVFSMethod_static.read           =captive_gnomevfs_read;
-       GnomeVFSMethod_static.write          =captive_gnomevfs_write;
-       GnomeVFSMethod_static.seek           =captive_gnomevfs_seek;
-       GnomeVFSMethod_static.tell           =captive_gnomevfs_tell;
-       GnomeVFSMethod_static.create         =captive_gnomevfs_create;  /* mandatory */
-       GnomeVFSMethod_static.is_local       =captive_gnomevfs_is_local;        /* mandatory */
-       GnomeVFSMethod_static.get_file_info  =captive_gnomevfs_get_file_info;   /* mandatory */
+       GnomeVFSMethod_static.open_directory  =captive_gnomevfs_open_directory;
+       GnomeVFSMethod_static.close_directory =captive_gnomevfs_close_directory;
+       GnomeVFSMethod_static.read_directory  =captive_gnomevfs_read_directory;
+       GnomeVFSMethod_static.make_directory  =captive_gnomevfs_make_directory;
+       GnomeVFSMethod_static.remove_directory=captive_gnomevfs_remove_directory;
+       GnomeVFSMethod_static.open            =captive_gnomevfs_open;   /* mandatory */
+       GnomeVFSMethod_static.close           =captive_gnomevfs_close;
+       GnomeVFSMethod_static.read            =captive_gnomevfs_read;
+       GnomeVFSMethod_static.write           =captive_gnomevfs_write;
+       GnomeVFSMethod_static.seek            =captive_gnomevfs_seek;
+       GnomeVFSMethod_static.tell            =captive_gnomevfs_tell;
+       GnomeVFSMethod_static.create          =captive_gnomevfs_create; /* mandatory */
+       GnomeVFSMethod_static.is_local        =captive_gnomevfs_is_local;       /* mandatory */
+       GnomeVFSMethod_static.get_file_info   =captive_gnomevfs_get_file_info;  /* mandatory */
        G_UNLOCK(GnomeVFSMethod_static);
 
        return &GnomeVFSMethod_static;
index c51566d..8fdbad7 100644 (file)
@@ -325,3 +325,29 @@ GnomeVFSResult errvfsresult;
 
        return GNOME_VFS_OK;
 }
+
+
+GnomeVFSResult captive_directory_remove(CaptiveDirectoryObject *captive_directory_object)
+{
+NTSTATUS err;
+FILE_DISPOSITION_INFORMATION FileDispositionInformation_struct;
+IO_STATUS_BLOCK dir_IoStatusBlock;
+GnomeVFSResult errvfsresult;
+
+       g_return_val_if_fail(captive_directory_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(captive_directory_object->dir_Handle!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+       FileDispositionInformation_struct.DoDeleteFile=TRUE;
+
+       err=NtSetInformationFile(
+                       captive_directory_object->dir_Handle,   /* FileHandle */
+                       &dir_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 aea7445..b6855ea 100644 (file)
@@ -59,6 +59,7 @@ GType captive_directory_object_get_type(void);
 GnomeVFSResult captive_directory_new_open(CaptiveDirectoryObject **captive_directory_object_return,const gchar *pathname);
 GnomeVFSResult captive_directory_new_make(CaptiveDirectoryObject **captive_directory_object_return,const gchar *pathname,guint perm);
 GnomeVFSResult captive_directory_read(CaptiveDirectoryObject *captive_directory_object,GnomeVFSFileInfo *file_info);
+GnomeVFSResult captive_directory_remove(CaptiveDirectoryObject *captive_directory_object);
 
 
 G_END_DECLS