2 * gnome-vfs init/shutdown implementation of interface to libcaptive
3 * Copyright (C) 2002 Jan Kratochvil <project-captive@jankratochvil.net>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; exactly version 2 of June 1991 is required
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "giognomevfs.h"
23 #include <libgnomevfs/gnome-vfs-method.h>
24 #include <glib/gmessages.h>
25 #include "captive/macros.h"
26 #include "gnome-vfs-module.h"
27 #include "captive/client-directory.h"
28 #include "captive/client-file.h"
29 #include "captive/client.h"
32 static GnomeVFSMethod GnomeVFSMethod_static;
33 G_LOCK_DEFINE_STATIC(GnomeVFSMethod_static);
36 /* FIXME: multi-parent */
37 G_LOCK_DEFINE_STATIC(captive_gnomevfs_uri_parent); /* covers also 'captive_gnomevfs_uri_parent_giognomevfs' */
38 static gchar *captive_gnomevfs_uri_parent;
39 static gchar *captive_gnomevfs_uri_parent_fs_path;
40 static struct captive_gnomevfs_giognomevfs *captive_gnomevfs_uri_parent_giognomevfs;
43 static GnomeVFSResult captive_gnomevfs_uri_parent_init(GnomeVFSURI *uri)
45 gchar *uri_parent_string;
46 GnomeVFSResult errvfsresult;
48 g_return_val_if_fail(uri!=NULL,GNOME_VFS_ERROR_INVALID_URI);
51 return GNOME_VFS_ERROR_INVALID_URI;
52 if (!uri->text) /* not needed here but we don't permit non-specific fs-image reference */
53 return GNOME_VFS_ERROR_INVALID_URI;
54 uri_parent_string=gnome_vfs_uri_to_string(uri->parent,GNOME_VFS_URI_HIDE_NONE);
55 g_assert(uri_parent_string!=NULL);
56 /* FIXME: multi-parent */
57 G_LOCK(captive_gnomevfs_uri_parent);
58 if (captive_gnomevfs_uri_parent) {
59 g_return_val_if_fail(!strcmp(uri_parent_string,captive_gnomevfs_uri_parent),GNOME_VFS_ERROR_TOO_MANY_OPEN_FILES);
60 g_free(uri_parent_string);
63 errvfsresult=captive_gnomevfs_giognomevfs_new(&captive_gnomevfs_uri_parent_giognomevfs,
64 captive_gnomevfs_uri_parent_fs_path,uri->parent);
65 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
66 captive_gnomevfs_uri_parent=uri_parent_string;
68 G_UNLOCK(captive_gnomevfs_uri_parent);
74 static GnomeVFSResult captive_gnomevfs_open_directory(GnomeVFSMethod *method,
75 GnomeVFSMethodHandle **method_handle,GnomeVFSURI *uri,GnomeVFSFileInfoOptions options,GnomeVFSContext *context)
77 GnomeVFSResult errvfsresult;
78 CaptiveDirectoryObject *captive_directory_object;
80 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
81 g_return_val_if_fail(method_handle!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
83 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
84 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
87 errvfsresult=captive_directory_new_open(
88 &captive_directory_object, /* captive_directory_object_return */
89 uri->text); /* pathname */
92 *method_handle=(GnomeVFSMethodHandle *)captive_directory_object;
97 static GnomeVFSResult captive_gnomevfs_close_directory(GnomeVFSMethod *method,
98 GnomeVFSMethodHandle *method_handle,GnomeVFSContext *context)
100 CaptiveDirectoryObject *captive_directory_object;
102 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
103 captive_directory_object=(CaptiveDirectoryObject *)method_handle;
104 g_return_val_if_fail(CAPTIVE_DIRECTORY_IS_OBJECT(captive_directory_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
107 g_object_unref(captive_directory_object);
108 G_UNLOCK(libcaptive);
114 static GnomeVFSResult captive_gnomevfs_read_directory(GnomeVFSMethod *method,
115 GnomeVFSMethodHandle *method_handle,GnomeVFSFileInfo *file_info,GnomeVFSContext *context)
117 GnomeVFSResult errvfsresult;
118 CaptiveDirectoryObject *captive_directory_object;
120 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
121 captive_directory_object=(CaptiveDirectoryObject *)method_handle;
122 g_return_val_if_fail(CAPTIVE_DIRECTORY_IS_OBJECT(captive_directory_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
123 g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
126 errvfsresult=captive_directory_read(captive_directory_object,file_info);
127 G_UNLOCK(libcaptive);
133 static GnomeVFSResult captive_gnomevfs_make_directory(GnomeVFSMethod *method,
134 GnomeVFSURI *uri,guint perm,GnomeVFSContext *context)
136 GnomeVFSResult errvfsresult;
137 CaptiveDirectoryObject *captive_directory_object;
139 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
141 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
142 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
145 errvfsresult=captive_directory_new_make(
146 &captive_directory_object, /* captive_directory_object_return */
147 uri->text, /* pathname */
149 G_UNLOCK(libcaptive);
150 if (errvfsresult!=GNOME_VFS_OK)
154 g_object_unref(captive_directory_object);
155 G_UNLOCK(libcaptive);
161 static GnomeVFSResult captive_gnomevfs_remove_directory(GnomeVFSMethod *method,
162 GnomeVFSURI *uri,GnomeVFSContext *context)
164 GnomeVFSResult errvfsresult;
165 CaptiveDirectoryObject *captive_directory_object;
167 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
169 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
170 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
173 errvfsresult=captive_directory_new_open(
174 &captive_directory_object, /* captive_directory_object_return */
175 uri->text); /* pathname */
176 G_UNLOCK(libcaptive);
177 if (errvfsresult!=GNOME_VFS_OK)
181 errvfsresult=captive_directory_remove(captive_directory_object);
182 G_UNLOCK(libcaptive);
185 g_object_unref(captive_directory_object);
186 G_UNLOCK(libcaptive);
192 static GnomeVFSResult captive_gnomevfs_open(GnomeVFSMethod *method,
193 GnomeVFSMethodHandle **method_handle_return,GnomeVFSURI *uri,GnomeVFSOpenMode mode,GnomeVFSContext *context)
195 GnomeVFSResult errvfsresult;
196 CaptiveFileObject *captive_file_object;
198 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
199 g_return_val_if_fail(method_handle_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
201 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
202 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
205 errvfsresult=captive_file_new_open(&captive_file_object,uri->text,mode);
206 G_UNLOCK(libcaptive);
208 *method_handle_return=(GnomeVFSMethodHandle *)captive_file_object;
213 static GnomeVFSResult captive_gnomevfs_create(GnomeVFSMethod *method,
214 GnomeVFSMethodHandle **method_handle_return,GnomeVFSURI *uri,GnomeVFSOpenMode mode,gboolean exclusive,guint perm,
215 GnomeVFSContext *context)
217 GnomeVFSResult errvfsresult;
218 CaptiveFileObject *captive_file_object;
220 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
221 g_return_val_if_fail(method_handle_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
223 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
224 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
227 errvfsresult=captive_file_new_create(&captive_file_object,uri->text,mode,exclusive,perm);
228 G_UNLOCK(libcaptive);
230 *method_handle_return=(GnomeVFSMethodHandle *)captive_file_object;
235 GnomeVFSResult captive_gnomevfs_unlink(GnomeVFSMethod *method,
236 GnomeVFSURI *uri,GnomeVFSContext *context)
238 GnomeVFSResult errvfsresult;
239 CaptiveFileObject *captive_file_object;
241 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
243 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
244 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
247 errvfsresult=captive_file_new_open(&captive_file_object,uri->text,
248 (GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_WRITE | GNOME_VFS_OPEN_RANDOM)); /* mode; is it OK? */
249 G_UNLOCK(libcaptive);
250 if (errvfsresult!=GNOME_VFS_OK)
254 errvfsresult=captive_file_remove(captive_file_object);
255 G_UNLOCK(libcaptive);
258 g_object_unref(captive_file_object);
259 G_UNLOCK(libcaptive);
265 static GnomeVFSResult captive_gnomevfs_close(GnomeVFSMethod *method,
266 GnomeVFSMethodHandle *method_handle,GnomeVFSContext *context)
268 CaptiveFileObject *captive_file_object;
270 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
271 captive_file_object=(CaptiveFileObject *)method_handle;
272 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
275 g_object_unref(captive_file_object);
276 G_UNLOCK(libcaptive);
282 static GnomeVFSResult captive_gnomevfs_read(GnomeVFSMethod *method,GnomeVFSMethodHandle *method_handle,
283 gpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return,GnomeVFSContext *context)
285 GnomeVFSResult errvfsresult;
286 CaptiveFileObject *captive_file_object;
288 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
289 captive_file_object=(CaptiveFileObject *)method_handle;
290 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
291 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
292 g_return_val_if_fail(bytes_read_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
295 errvfsresult=captive_file_read(captive_file_object,buffer,num_bytes,bytes_read_return);
296 G_UNLOCK(libcaptive);
302 static GnomeVFSResult captive_gnomevfs_write(GnomeVFSMethod *method,GnomeVFSMethodHandle *method_handle,
303 gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return,GnomeVFSContext *context)
305 GnomeVFSResult errvfsresult;
306 CaptiveFileObject *captive_file_object;
308 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
309 captive_file_object=(CaptiveFileObject *)method_handle;
310 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
311 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
312 g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
315 errvfsresult=captive_file_write(captive_file_object,buffer,num_bytes,bytes_written_return);
316 G_UNLOCK(libcaptive);
322 static GnomeVFSResult captive_gnomevfs_seek(GnomeVFSMethod *method,
323 GnomeVFSMethodHandle *method_handle,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset,GnomeVFSContext *context)
325 GnomeVFSResult errvfsresult;
326 CaptiveFileObject *captive_file_object;
328 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
329 captive_file_object=(CaptiveFileObject *)method_handle;
330 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
333 errvfsresult=captive_file_seek(captive_file_object,whence,offset);
334 G_UNLOCK(libcaptive);
339 static GnomeVFSResult captive_gnomevfs_tell(GnomeVFSMethod *method,
340 GnomeVFSMethodHandle *method_handle,GnomeVFSFileOffset *offset_return)
342 GnomeVFSResult errvfsresult;
343 CaptiveFileObject *captive_file_object;
345 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
346 captive_file_object=(CaptiveFileObject *)method_handle;
347 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
348 g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
351 errvfsresult=captive_file_tell(captive_file_object,offset_return);
352 G_UNLOCK(libcaptive);
358 static gboolean captive_gnomevfs_is_local(GnomeVFSMethod *method,const GnomeVFSURI *uri)
360 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
361 g_return_val_if_fail(uri!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
363 return gnome_vfs_uri_is_local(uri->parent);
367 static GnomeVFSResult captive_gnomevfs_get_file_info(GnomeVFSMethod *method,
368 GnomeVFSURI *uri,GnomeVFSFileInfo *file_info,GnomeVFSFileInfoOptions options,GnomeVFSContext *context)
370 GnomeVFSResult errvfsresult;
371 CaptiveFileObject *captive_file_object;
373 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
374 g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
375 /* handle 'options & GNOME_VFS_FILE_INFO_GET_MIME_TYPE'? */
377 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
378 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
381 errvfsresult=captive_file_new_open(&captive_file_object,uri->text,
382 0); /* mode; 0 means FILE_READ_ATTRIBUTES */
383 G_UNLOCK(libcaptive);
384 if (errvfsresult!=GNOME_VFS_OK)
388 errvfsresult=captive_file_file_info_get(captive_file_object,file_info);
389 G_UNLOCK(libcaptive);
392 g_object_unref(captive_file_object);
393 G_UNLOCK(libcaptive);
399 GnomeVFSResult captive_gnomevfs_get_file_info_from_handle(GnomeVFSMethod *method,
400 GnomeVFSMethodHandle *method_handle,GnomeVFSFileInfo *file_info,GnomeVFSFileInfoOptions options,GnomeVFSContext *context)
402 GnomeVFSResult errvfsresult;
403 CaptiveFileObject *captive_file_object;
405 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
406 captive_file_object=(CaptiveFileObject *)method_handle;
407 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
408 g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
409 /* handle 'options & GNOME_VFS_FILE_INFO_GET_MIME_TYPE'? */
412 errvfsresult=captive_file_file_info_get(captive_file_object,file_info);
413 G_UNLOCK(libcaptive);
419 GnomeVFSResult captive_gnomevfs_truncate_handle(GnomeVFSMethod *method,
420 GnomeVFSMethodHandle *handle,GnomeVFSFileSize length,GnomeVFSContext *context)
422 GnomeVFSResult errvfsresult;
423 CaptiveFileObject *captive_file_object;
425 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
426 captive_file_object=(CaptiveFileObject *)handle;
427 g_return_val_if_fail(CAPTIVE_FILE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
430 errvfsresult=captive_file_truncate(captive_file_object,length);
431 G_UNLOCK(libcaptive);
436 GnomeVFSResult captive_gnomevfs_truncate(GnomeVFSMethod *method,
437 GnomeVFSURI *uri,GnomeVFSFileSize length,GnomeVFSContext *context)
439 GnomeVFSResult errvfsresult;
440 CaptiveFileObject *captive_file_object;
442 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
444 errvfsresult=captive_gnomevfs_uri_parent_init(uri);
445 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
448 errvfsresult=captive_file_new_open(&captive_file_object,uri->text,
449 (GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_WRITE | GNOME_VFS_OPEN_RANDOM)); /* mode; is it OK? */
450 G_UNLOCK(libcaptive);
451 if (errvfsresult!=GNOME_VFS_OK)
455 errvfsresult=captive_file_truncate(captive_file_object,length);
456 G_UNLOCK(libcaptive);
459 g_object_unref(captive_file_object);
460 G_UNLOCK(libcaptive);
466 GnomeVFSResult captive_gnomevfs_move(GnomeVFSMethod *method,
467 GnomeVFSURI *old_uri,GnomeVFSURI *new_uri,gboolean force_replace,GnomeVFSContext *context)
469 GnomeVFSResult errvfsresult;
470 CaptiveFileObject *captive_old_file_object;
472 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
474 errvfsresult=captive_gnomevfs_uri_parent_init(old_uri);
475 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
477 errvfsresult=captive_gnomevfs_uri_parent_init(new_uri);
478 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
481 errvfsresult=captive_file_new_open(&captive_old_file_object,old_uri->text,
482 (GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_WRITE)); /* mode; is it OK? */
483 G_UNLOCK(libcaptive);
484 if (errvfsresult!=GNOME_VFS_OK)
488 errvfsresult=captive_file_move(captive_old_file_object,new_uri->text,force_replace);
489 G_UNLOCK(libcaptive);
492 g_object_unref(captive_old_file_object);
493 G_UNLOCK(libcaptive);
499 GnomeVFSResult captive_gnomevfs_check_same_fs(GnomeVFSMethod *method,
500 GnomeVFSURI *a,GnomeVFSURI *b,gboolean *same_fs_return,GnomeVFSContext *context)
502 GnomeVFSResult errvfsresult;
504 g_return_val_if_fail(method==&GnomeVFSMethod_static,GNOME_VFS_ERROR_BAD_PARAMETERS);
505 g_return_val_if_fail(a!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
506 g_return_val_if_fail(b!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
507 g_return_val_if_fail(same_fs_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
509 errvfsresult=captive_gnomevfs_uri_parent_init(a);
510 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
512 errvfsresult=captive_gnomevfs_uri_parent_init(b);
513 g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
515 /* TODO: Change when we start to support multiple 'sandbox'ed filesystems! */
516 *same_fs_return=TRUE;
523 * captive_gnomevfs_init:
525 * Returns: Initialized structure of #GnomeVFSMethod with static methods of libcaptive-gnomevfs.
527 GnomeVFSMethod *captive_gnomevfs_method_init(const gchar *fs_path)
529 G_LOCK(captive_gnomevfs_uri_parent);
530 captive_gnomevfs_uri_parent_fs_path=g_strdup(fs_path);
531 G_UNLOCK(captive_gnomevfs_uri_parent);
533 G_LOCK(GnomeVFSMethod_static);
534 CAPTIVE_MEMZERO(&GnomeVFSMethod_static);
535 GnomeVFSMethod_static.method_table_size=sizeof(GnomeVFSMethod_static);
536 GnomeVFSMethod_static.open =captive_gnomevfs_open; /* mandatory */
537 GnomeVFSMethod_static.create =captive_gnomevfs_create; /* mandatory */
538 GnomeVFSMethod_static.close =captive_gnomevfs_close;
539 GnomeVFSMethod_static.read =captive_gnomevfs_read;
540 GnomeVFSMethod_static.write =captive_gnomevfs_write;
541 GnomeVFSMethod_static.seek =captive_gnomevfs_seek;
542 GnomeVFSMethod_static.tell =captive_gnomevfs_tell;
543 GnomeVFSMethod_static.truncate_handle =captive_gnomevfs_truncate_handle;
544 GnomeVFSMethod_static.open_directory =captive_gnomevfs_open_directory;
545 GnomeVFSMethod_static.close_directory =captive_gnomevfs_close_directory;
546 GnomeVFSMethod_static.read_directory =captive_gnomevfs_read_directory;
547 GnomeVFSMethod_static.get_file_info =captive_gnomevfs_get_file_info; /* mandatory */
548 GnomeVFSMethod_static.get_file_info_from_handle=captive_gnomevfs_get_file_info_from_handle;
549 GnomeVFSMethod_static.is_local =captive_gnomevfs_is_local; /* mandatory */
550 GnomeVFSMethod_static.make_directory =captive_gnomevfs_make_directory;
551 GnomeVFSMethod_static.remove_directory =captive_gnomevfs_remove_directory;
552 GnomeVFSMethod_static.move =captive_gnomevfs_move;
553 GnomeVFSMethod_static.unlink =captive_gnomevfs_unlink;
554 GnomeVFSMethod_static.check_same_fs =captive_gnomevfs_check_same_fs;
555 /* TODO: GnomeVFSMethodSetFileInfo set_file_info; */
556 GnomeVFSMethod_static.truncate =captive_gnomevfs_truncate;
557 /* TODO: GnomeVFSMethodFindDirectoryFunc find_directory; */
558 /* TODO: GnomeVFSMethodCreateSymbolicLinkFunc create_symbolic_link; */
559 /* TODO: GnomeVFSMethodMonitorAddFunc monitor_add; */
560 /* TODO: GnomeVFSMethodMonitorCancelFunc monitor_cancel; */
561 /* TODO: GnomeVFSMethodFileControlFunc file_control; */
562 G_UNLOCK(GnomeVFSMethod_static);
564 return &GnomeVFSMethod_static;
569 * captive_gnomevfs_method_shutdown:
570 * Shutdowns libcaptive-gnomevfs successfuly flushing all caches.
572 * This operation may not completely clean up the process space
573 * if libcaptive #sandbox is not in use.
575 * Sad note about gnome-vfs-2.1.5 is that it never calls this function. :-)
577 void captive_gnomevfs_method_shutdown(void)
579 g_return_if_fail(captive_gnomevfs_uri_parent_giognomevfs!=NULL);
580 g_return_if_fail(captive_image_iochannel==(GIOChannel *)captive_gnomevfs_uri_parent_giognomevfs);
582 g_io_channel_unref((GIOChannel *)captive_gnomevfs_uri_parent_giognomevfs);
583 captive_gnomevfs_uri_parent_giognomevfs=NULL;
584 g_return_if_fail(captive_image_iochannel==(GIOChannel *)captive_gnomevfs_uri_parent_giognomevfs); /* ==NULL */