static GnomeVFSResult captive_file_parent_tell(CaptiveFileObject *captive_file_object,GnomeVFSFileOffset *offset_return);
static GnomeVFSResult captive_file_parent_remove(CaptiveFileObject *captive_file_object);
static GnomeVFSResult captive_file_parent_file_info_get
- (CaptiveFileObject *captive_file_object,GnomeVFSFileInfo *file_info);
+ (CaptiveFileObject *captive_file_object,CaptiveFileInfoObject **captive_file_info_object_return);
static GnomeVFSResult captive_file_parent_file_info_set
- (CaptiveFileObject *captive_file_object,const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask);
+ (CaptiveFileObject *captive_file_object,CaptiveFileInfoObject *captive_file_info_object,GnomeVFSSetFileInfoMask mask);
static GnomeVFSResult captive_file_parent_truncate(CaptiveFileObject *captive_file_object,GnomeVFSFileSize file_size);
static GnomeVFSResult captive_file_parent_move
(CaptiveFileObject *captive_file_object_old,const gchar *pathname_new,gboolean force_replace);
{
CaptiveFileParentObject *captive_file_parent_object;
GnomeVFSResult r;
+gint retried=0;
+gint retried_commit=0;
g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
captive_file_parent_init(captive_file_parent_object,captive_vfs_object);
- if (GNOME_VFS_OK!=(r=captive_parent_connector_connect(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
- return r;
-
- if (GNOME_VFS_OK!=(r=captive_sandbox_parent_file_new_open(captive_file_parent_object))) {
- g_object_unref(captive_file_parent_object);
- *captive_file_object_return=NULL;
- return r;
- }
-
- *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
- return (*captive_file_parent_object_captive_parent_connector_open_orig)
- (CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
+ do {
+ if (GNOME_VFS_OK!=(r=captive_parent_connector_connect(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
+ return r;
+ if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
+ !=(r=captive_sandbox_parent_file_new_open(captive_file_parent_object))) {
+ if (GNOME_VFS_ERROR_SERVICE_OBSOLETE==r) {
+ if (!retried_commit++) {
+ if (GNOME_VFS_OK!=(r=captive_vfs_commit(captive_vfs_object)))
+ return r;
+ retried=0;
+ continue;
+ }
+ }
+ if (GNOME_VFS_OK!=r) {
+ g_object_unref(captive_file_parent_object);
+ *captive_file_object_return=NULL;
+ return r;
+ }
+ *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
+ return (*captive_file_parent_object_captive_parent_connector_open_orig)
+ (CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
+ }
+ } while (!retried++);
+ return r;
}
{
CaptiveFileParentObject *captive_file_parent_object;
GnomeVFSResult r;
+gint retried=0;
+gint retried_commit=0;
g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
if (GNOME_VFS_OK!=(r=captive_parent_connector_connect(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
return r;
- if (GNOME_VFS_OK!=(r=captive_sandbox_parent_file_new_create(captive_file_parent_object,exclusive,perm))) {
- g_object_unref(captive_file_parent_object);
- *captive_file_object_return=NULL;
- return r;
- }
- captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
-
- *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
- return (*captive_file_parent_object_captive_parent_connector_open_orig)
- (CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
+ do {
+ if (GNOME_VFS_OK!=(r=captive_parent_connector_connect(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
+ return r;
+ if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
+ !=(r=captive_sandbox_parent_file_new_create(captive_file_parent_object,exclusive,perm))) {
+ if (GNOME_VFS_ERROR_SERVICE_OBSOLETE==r) {
+ if (!retried_commit++) {
+ if (GNOME_VFS_OK!=(r=captive_vfs_commit(captive_vfs_object)))
+ return r;
+ retried=0;
+ continue;
+ }
+ }
+ if (GNOME_VFS_OK!=r) {
+ g_object_unref(captive_file_parent_object);
+ *captive_file_object_return=NULL;
+ return r;
+ }
+ captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
+ *captive_file_object_return=CAPTIVE_FILE_OBJECT(captive_file_parent_object);
+ return (*captive_file_parent_object_captive_parent_connector_open_orig)
+ (CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
+ }
+ } while (!retried++);
+ return r;
}
CaptiveFileParentObject *captive_file_parent_object;
GnomeVFSResult r;
gint retried=0;
+gint retried_commit=0;
g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
return r;
if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
- !=(r=captive_sandbox_parent_file_read(captive_file_parent_object,buffer,num_bytes,bytes_read_return)))
+ !=(r=captive_sandbox_parent_file_read(captive_file_parent_object,buffer,num_bytes,bytes_read_return))) {
+ if (GNOME_VFS_ERROR_SERVICE_OBSOLETE==r) {
+ if (!retried_commit++) {
+ if (GNOME_VFS_OK!=(r=captive_vfs_commit(captive_file_object->vfs)))
+ return r;
+ retried=0;
+ continue;
+ }
+ }
return r;
+ }
} while (!retried++);
return r;
}
static GnomeVFSResult captive_file_parent_file_info_get
- (CaptiveFileObject *captive_file_object,GnomeVFSFileInfo *file_info)
+ (CaptiveFileObject *captive_file_object,CaptiveFileInfoObject **captive_file_info_object_return)
{
CaptiveFileParentObject *captive_file_parent_object;
GnomeVFSResult r;
gint retried=0;
g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
- g_return_val_if_fail(file_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+ g_return_val_if_fail(captive_file_info_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
return r;
if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
- !=(r=captive_sandbox_parent_file_file_info_get(captive_file_parent_object,file_info)))
+ !=(r=captive_sandbox_parent_file_file_info_get(captive_file_parent_object,captive_file_info_object_return)))
return r;
} while (!retried++);
return r;
static GnomeVFSResult captive_file_parent_file_info_set
- (CaptiveFileObject *captive_file_object,const GnomeVFSFileInfo *info,GnomeVFSSetFileInfoMask mask)
+ (CaptiveFileObject *captive_file_object,CaptiveFileInfoObject *captive_file_info_object,GnomeVFSSetFileInfoMask mask)
{
CaptiveFileParentObject *captive_file_parent_object;
GnomeVFSResult r;
gint retried=0;
g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
- g_return_val_if_fail(info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+ g_return_val_if_fail(CAPTIVE_FILE_INFO_IS_OBJECT(captive_file_info_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
captive_file_parent_object=CAPTIVE_FILE_PARENT_OBJECT(captive_file_object);
if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
return r;
if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
- !=(r=captive_sandbox_parent_file_file_info_set(captive_file_parent_object,info,mask))) {
+ !=(r=captive_sandbox_parent_file_file_info_set(captive_file_parent_object,captive_file_info_object,mask))) {
if (GNOME_VFS_OK==r)
captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object));
return r;