+GnomeVFSResult captive_gnomevfs_truncate_handle(GnomeVFSMethod *method,
+ GnomeVFSMethodHandle *handle,GnomeVFSFileSize length,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 *)handle;
+ g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+ G_LOCK(libcaptive);
+ errvfsresult=captive_file_truncate(captive_file_object,length);
+ G_UNLOCK(libcaptive);
+
+ return errvfsresult;
+}
+
+GnomeVFSResult captive_gnomevfs_truncate(GnomeVFSMethod *method,
+ GnomeVFSURI *uri,GnomeVFSFileSize length,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_truncate(captive_file_object,length);
+ G_UNLOCK(libcaptive);
+
+ G_LOCK(libcaptive);
+ g_object_unref(captive_file_object);
+ G_UNLOCK(libcaptive);
+
+ return errvfsresult;
+}
+
+