2 * captive vfs 'file' interface to reactos of sandbox parent
3 * Copyright (C) 2002-2003 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 "file-parent.h" /* self */
23 #include <glib/gmessages.h>
24 #include "../sandbox/parent-File.h"
25 #include "vfs-parent.h"
26 #include "reactos/ntos/types.h" /* for ULONG */
27 #include "parent-connector.h"
30 static gpointer captive_file_parent_object_parent_class=NULL;
33 static GnomeVFSResult captive_file_parent_close(CaptiveFileObject *captive_file_object);
34 static GnomeVFSResult captive_file_parent_read(CaptiveFileObject *captive_file_object,
35 gpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return);
36 static GnomeVFSResult captive_file_parent_write(CaptiveFileObject *captive_file_object,
37 gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return);
38 static GnomeVFSResult captive_file_parent_seek
39 (CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset);
40 static GnomeVFSResult captive_file_parent_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return);
41 static GnomeVFSResult captive_file_parent_remove(CaptiveFileObject *captive_file_object);
42 static GnomeVFSResult captive_file_parent_file_info_get
43 (CaptiveFileObject *captive_file_object,GnomeVFSFileInfo *file_info);
44 static GnomeVFSResult captive_file_parent_file_info_set
45 (CaptiveFileObject *captive_file_object,const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask);
46 static GnomeVFSResult captive_file_parent_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size);
47 static GnomeVFSResult captive_file_parent_move
48 (CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace);
51 static void captive_file_parent_object_dispose(CaptiveFileParentObject *captive_file_parent_object)
53 g_return_if_fail(captive_file_parent_object!=NULL);
55 captive_file_parent_close(CAPTIVE_FILE_OBJECT(captive_file_parent_object)); /* errors ignored */
57 if (captive_parent_connector_dispose(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object)))
60 G_OBJECT_CLASS(captive_file_parent_object_parent_class)->dispose((GObject *)captive_file_parent_object);
63 static void captive_file_parent_object_finalize(CaptiveFileParentObject *captive_file_parent_object)
65 g_return_if_fail(captive_file_parent_object!=NULL);
67 captive_parent_connector_finalize(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
69 g_free(captive_file_parent_object->pathname);
70 captive_file_parent_object->pathname=NULL;
72 G_OBJECT_CLASS(captive_file_parent_object_parent_class)->finalize((GObject *)captive_file_parent_object);
75 static void captive_file_parent_object_class_init(CaptiveFileParentObjectClass *class)
77 GObjectClass *gobject_class=G_OBJECT_CLASS(class);
78 CaptiveFileObjectClass *captive_file_object_class=CAPTIVE_FILE_OBJECT_CLASS(class);
80 captive_file_parent_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
81 gobject_class->dispose=(void (*)(GObject *object))captive_file_parent_object_dispose;
82 gobject_class->finalize=(void (*)(GObject *object))captive_file_parent_object_finalize;
84 captive_file_object_class->read=captive_file_parent_read;
85 captive_file_object_class->write=captive_file_parent_write;
86 captive_file_object_class->seek=captive_file_parent_seek;
87 captive_file_object_class->tell=captive_file_parent_tell;
88 captive_file_object_class->remove=captive_file_parent_remove;
89 captive_file_object_class->file_info_get=captive_file_parent_file_info_get;
90 captive_file_object_class->file_info_set=captive_file_parent_file_info_set;
91 captive_file_object_class->truncate=captive_file_parent_truncate;
92 captive_file_object_class->move=captive_file_parent_move;
96 static GnomeVFSResult (*captive_file_parent_object_captive_parent_connector_open_orig)
97 (CaptiveParentConnector *captive_parent_connector);
98 static GnomeVFSResult captive_file_parent_object_captive_parent_connector_open
99 (CaptiveParentConnector *captive_parent_connector);
101 static GnomeVFSResult captive_file_parent_object_captive_parent_connector_close
102 (CaptiveParentConnector *captive_parent_connector);
103 static GnomeVFSResult (*captive_file_parent_object_captive_parent_connector_close_orig)
104 (CaptiveParentConnector *captive_parent_connector);
106 static G_CONST_RETURN gchar *captive_file_parent_object_captive_parent_connector_get_pathname
107 (CaptiveParentConnector *captive_parent_connector);
109 static void captive_file_parent_object_captive_parent_connector_init(CaptiveParentConnectorIface *captive_parent_connector_iface)
111 g_return_if_fail(CAPTIVE_IS_PARENT_CONNECTOR_CLASS(captive_parent_connector_iface));
113 captive_file_parent_object_captive_parent_connector_open_orig=captive_parent_connector_iface->open;
114 captive_parent_connector_iface->open=captive_file_parent_object_captive_parent_connector_open;
116 captive_file_parent_object_captive_parent_connector_close_orig=captive_parent_connector_iface->close;
117 captive_parent_connector_iface->close=captive_file_parent_object_captive_parent_connector_close;
119 captive_parent_connector_iface->get_pathname=captive_file_parent_object_captive_parent_connector_get_pathname;
123 static void captive_file_parent_object_init(CaptiveFileParentObject *captive_file_parent_object)
125 g_return_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object));
129 GType captive_file_parent_object_get_type(void)
131 static GType captive_file_parent_object_type=0;
133 if (!captive_file_parent_object_type) {
134 static const GTypeInfo captive_file_parent_object_info={
135 sizeof(CaptiveFileParentObjectClass),
136 NULL, /* base_init */
137 NULL, /* base_finalize */
138 (GClassInitFunc)captive_file_parent_object_class_init,
139 NULL, /* class_finalize */
140 NULL, /* class_data */
141 sizeof(CaptiveFileParentObject),
143 (GInstanceInitFunc)captive_file_parent_object_init,
145 static const GInterfaceInfo captive_parent_connector_info={
146 (GInterfaceInitFunc)captive_file_parent_object_captive_parent_connector_init, /* interface_init */
147 NULL, /* interface_finalize */
148 NULL, /* interface_data */
151 captive_file_parent_object_type=g_type_register_static(CAPTIVE_FILE_TYPE_OBJECT,
152 "CaptiveFileParentObject",&captive_file_parent_object_info,0);
153 g_type_add_interface_static(captive_file_parent_object_type,
154 CAPTIVE_TYPE_PARENT_CONNECTOR,&captive_parent_connector_info);
157 return captive_file_parent_object_type;
161 static void captive_file_parent_init
162 (CaptiveFileParentObject *captive_file_parent_object,CaptiveVfsObject *captive_vfs_object)
164 g_return_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_parent_object));
165 g_return_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object));
167 /* Order of captive_file_init() and captive_parent_connector_init()
168 * should not matter as 'vfs' is passed by value to captive_parent_connector_init().
170 captive_file_init(CAPTIVE_FILE_OBJECT(captive_file_parent_object),captive_vfs_object);
172 captive_parent_connector_init(
173 CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object), /* captive_parent_connector */
174 &captive_file_parent_object->corba_File_object, /* corba_objectp */
175 CAPTIVE_VFS_PARENT_OBJECT(CAPTIVE_FILE_OBJECT(captive_file_parent_object)->vfs)); /* captive_vfs_parent_object */
178 GnomeVFSResult captive_file_parent_new_open(CaptiveFileObject **captive_file_object_return,
179 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,GnomeVFSOpenMode mode)
181 CaptiveFileParentObject *captive_file_parent_object;
184 g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
185 g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
186 g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
188 captive_file_parent_object=g_object_new(
189 CAPTIVE_FILE_PARENT_TYPE_OBJECT, /* object_type */
190 NULL); /* first_property_name; FIXME: support properties */
191 captive_file_parent_object->pathname=g_strdup(pathname);
192 captive_file_parent_object->mode=mode;
194 captive_file_parent_init(captive_file_parent_object,captive_vfs_object);
196 if (GNOME_VFS_OK!=(r=captive_parent_connector_connect(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
199 if (GNOME_VFS_OK!=(r=captive_sandbox_parent_file_new_open(captive_file_parent_object))) {
200 g_object_unref(captive_file_parent_object);
201 *captive_file_object_return=NULL;
205 *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
206 return (*captive_file_parent_object_captive_parent_connector_open_orig)
207 (CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
211 GnomeVFSResult captive_file_parent_new_create(CaptiveFileObject **captive_file_object_return,
212 CaptiveVfsObject *captive_vfs_object,const gchar *pathname,GnomeVFSOpenMode mode,gboolean exclusive,guint perm)
214 CaptiveFileParentObject *captive_file_parent_object;
217 g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
218 g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
219 g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
221 captive_file_parent_object=g_object_new(
222 CAPTIVE_FILE_PARENT_TYPE_OBJECT, /* object_type */
223 NULL); /* first_property_name; FIXME: support properties */
224 captive_file_parent_object->pathname=g_strdup(pathname);
225 captive_file_parent_object->mode=mode;
227 captive_file_parent_init(captive_file_parent_object,captive_vfs_object);
229 if (GNOME_VFS_OK!=(r=captive_parent_connector_connect(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
232 if (GNOME_VFS_OK!=(r=captive_sandbox_parent_file_new_create(captive_file_parent_object,exclusive,perm))) {
233 g_object_unref(captive_file_parent_object);
234 *captive_file_object_return=NULL;
237 captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
239 *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
240 return (*captive_file_parent_object_captive_parent_connector_open_orig)
241 (CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
245 static GnomeVFSResult captive_file_parent_close(CaptiveFileObject *captive_file_object)
247 CaptiveFileParentObject *captive_file_parent_object;
251 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
253 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
256 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
258 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
259 !=(r=captive_parent_connector_close(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
261 } while (!retried++);
266 static GnomeVFSResult captive_file_parent_object_captive_parent_connector_open
267 (CaptiveParentConnector *captive_parent_connector)
271 g_return_val_if_fail(CAPTIVE_IS_PARENT_CONNECTOR(captive_parent_connector),GNOME_VFS_ERROR_BAD_PARAMETERS);
272 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_parent_connector),GNOME_VFS_ERROR_BAD_PARAMETERS);
274 if (GNOME_VFS_OK!=(r=captive_sandbox_parent_file_new_open(CAPTIVE_FILE_PARENT_OBJECT(captive_parent_connector))))
277 return (*captive_file_parent_object_captive_parent_connector_open_orig)(captive_parent_connector);
281 static GnomeVFSResult captive_file_parent_object_captive_parent_connector_close
282 (CaptiveParentConnector *captive_parent_connector)
286 g_return_val_if_fail(CAPTIVE_IS_PARENT_CONNECTOR(captive_parent_connector),GNOME_VFS_ERROR_BAD_PARAMETERS);
287 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_parent_connector),GNOME_VFS_ERROR_BAD_PARAMETERS);
289 if (GNOME_VFS_OK!=(r=captive_sandbox_parent_file_close(CAPTIVE_FILE_PARENT_OBJECT(captive_parent_connector))))
292 return (*captive_file_parent_object_captive_parent_connector_close_orig)(captive_parent_connector);
296 static G_CONST_RETURN gchar *captive_file_parent_object_captive_parent_connector_get_pathname
297 (CaptiveParentConnector *captive_parent_connector)
299 CaptiveFileParentObject *captive_file_parent_object;
301 g_return_val_if_fail(CAPTIVE_IS_PARENT_CONNECTOR(captive_parent_connector),NULL);
302 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_parent_connector),NULL);
304 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_parent_connector);
306 g_return_val_if_fail(captive_file_parent_object->pathname!=NULL,NULL);
308 return captive_file_parent_object->pathname;
312 static GnomeVFSResult captive_file_parent_read(CaptiveFileObject *captive_file_object,
313 gpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_read_return)
315 CaptiveFileParentObject *captive_file_parent_object;
319 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
320 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
321 g_return_val_if_fail(bytes_read_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
322 g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
324 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
327 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
329 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
330 !=(r=captive_sandbox_parent_file_read(captive_file_parent_object,buffer,num_bytes,bytes_read_return)))
332 } while (!retried++);
337 static GnomeVFSResult captive_file_parent_write(CaptiveFileObject *captive_file_object,
338 gconstpointer buffer,GnomeVFSFileSize num_bytes,GnomeVFSFileSize *bytes_written_return)
340 CaptiveFileParentObject *captive_file_parent_object;
343 gint retried_commit=0;
345 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
346 g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
347 g_return_val_if_fail(bytes_written_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
348 g_return_val_if_fail(num_bytes==(ULONG)num_bytes,GNOME_VFS_ERROR_BAD_PARAMETERS);
350 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
353 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
355 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
356 !=(r=captive_sandbox_parent_file_write(captive_file_parent_object,buffer,num_bytes,bytes_written_return))) {
357 /* Occured: ExRaiseStatus(STATUS_LOG_FILE_FULL); */
358 if (GNOME_VFS_ERROR_SERVICE_OBSOLETE==r) {
359 if (!retried_commit++) {
360 if (GNOME_VFS_OK!=(r=captive_vfs_commit(captive_file_object->vfs)))
366 g_assert(*bytes_written_return==num_bytes); /* Not GNOME_VFS_ERROR_SERVICE_OBSOLETE. */
368 captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
371 } while (!retried++);
376 static GnomeVFSResult captive_file_parent_seek
377 (CaptiveFileObject *captive_file_object,GnomeVFSSeekPosition whence,GnomeVFSFileOffset offset)
379 CaptiveFileParentObject *captive_file_parent_object;
383 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
385 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
388 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
390 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
391 !=(r=captive_sandbox_parent_file_seek(captive_file_parent_object,whence,offset)))
393 } while (!retried++);
398 static GnomeVFSResult captive_file_parent_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return)
400 CaptiveFileParentObject *captive_file_parent_object;
404 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
405 g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
407 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
410 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
412 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
413 !=(r=captive_sandbox_parent_file_tell(captive_file_parent_object,offset_return)))
415 } while (!retried++);
420 static GnomeVFSResult captive_file_parent_remove(CaptiveFileObject *captive_file_object)
422 CaptiveFileParentObject *captive_file_parent_object;
426 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
428 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
431 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
433 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
434 !=(r=captive_sandbox_parent_file_remove(captive_file_parent_object))) {
436 captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
439 } while (!retried++);
444 static GnomeVFSResult captive_file_parent_file_info_get
445 (CaptiveFileObject *captive_file_object,GnomeVFSFileInfo *file_info)
447 CaptiveFileParentObject *captive_file_parent_object;
451 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
452 g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
454 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
457 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
459 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
460 !=(r=captive_sandbox_parent_file_file_info_get(captive_file_parent_object,file_info)))
462 } while (!retried++);
467 static GnomeVFSResult captive_file_parent_file_info_set
468 (CaptiveFileObject *captive_file_object,const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask)
470 CaptiveFileParentObject *captive_file_parent_object;
474 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
475 g_return_val_if_fail(info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
477 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
480 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
482 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
483 !=(r=captive_sandbox_parent_file_file_info_set(captive_file_parent_object,info,mask))) {
485 captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
488 } while (!retried++);
493 static GnomeVFSResult captive_file_parent_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size)
495 CaptiveFileParentObject *captive_file_parent_object;
499 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
501 captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
504 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
506 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
507 !=(r=captive_sandbox_parent_file_truncate(captive_file_parent_object,file_size))) {
509 captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
512 } while (!retried++);
517 static GnomeVFSResult captive_file_parent_move
518 (CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace)
520 CaptiveFileParentObject *captive_file_parent_object_old;
524 g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object_old),GNOME_VFS_ERROR_BAD_PARAMETERS);
525 g_return_val_if_fail(pathname_new!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
527 captive_file_parent_object_old=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object_old);
530 if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object_old))))
532 if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
533 !=(r=captive_sandbox_parent_file_move(captive_file_parent_object_old,pathname_new,force_replace))) {
534 if (GNOME_VFS_OK==r) {
535 g_free(captive_file_parent_object_old->pathname);
536 captive_file_parent_object_old->pathname=g_strdup(pathname_new);
537 captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object_old));
541 } while (!retried++);