+file create
[captive.git] / src / client / libcaptive-gnomevfs / gnome-vfs-method.c
index 759c79f..2bdcf78 100644 (file)
@@ -151,6 +151,28 @@ CaptiveFileObject *captive_file_object;
 }
 
 
+static GnomeVFSResult captive_gnomevfs_create(GnomeVFSMethod *method,
+               GnomeVFSMethodHandle **method_handle_return,GnomeVFSURI *uri,GnomeVFSOpenMode mode,gboolean exclusive,guint perm,
+               GnomeVFSContext *context)
+{
+GnomeVFSResult errvfsresult;
+CaptiveFileObject *captive_file_object;
+
+       g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(method_handle_return!=NULL,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_create(&captive_file_object,uri->text,mode,exclusive,perm);
+       G_UNLOCK(libcaptive);
+
+       *method_handle_return=(GnomeVFSMethodHandle *)captive_file_object;
+       return errvfsresult;
+}
+
+
 static GnomeVFSResult captive_gnomevfs_close(GnomeVFSMethod *method,
                GnomeVFSMethodHandle *method_handle,GnomeVFSContext *context)
 {
@@ -188,6 +210,26 @@ CaptiveFileObject *captive_file_object;
 }
 
 
+static GnomeVFSResult captive_gnomevfs_write(GnomeVFSMethod *method,GnomeVFSMethodHandle *method_handle,
+               gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return,GnomeVFSContext *context)
+{
+GnomeVFSResult errvfsresult;
+CaptiveFileObject *captive_file_object;
+
+       g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       captive_file_object=(CaptiveFileObject *)method_handle;
+       g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+       G_LOCK(libcaptive);
+       errvfsresult=captive_file_write(captive_file_object,buffer,num_bytes,bytes_written_return);
+       G_UNLOCK(libcaptive);
+
+       return errvfsresult;
+}
+
+
 static GnomeVFSResult captive_gnomevfs_seek(GnomeVFSMethod *method,
                GnomeVFSMethodHandle *method_handle,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset,GnomeVFSContext *context)
 {
@@ -224,14 +266,6 @@ CaptiveFileObject *captive_file_object;
 }
 
 
-static GnomeVFSResult captive_gnomevfs_create(GnomeVFSMethod *method,
-               GnomeVFSMethodHandle **method_handle_return,GnomeVFSURI *uri,GnomeVFSOpenMode mode,gboolean exclusive,guint perm,
-               GnomeVFSContext *context)
-{
-       g_return_val_if_reached(GNOME_VFS_ERROR_NOT_SUPPORTED); /* FIXME: NOT IMPLEMENTED YET */
-}
-
-
 static gboolean captive_gnomevfs_is_local(GnomeVFSMethod *method,const GnomeVFSURI *uri)
 {
        g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
@@ -281,6 +315,7 @@ GnomeVFSMethod *captive_gnomevfs_method_init(const gchar *fs_path)
        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 */