static GnomeVFSResult captive_directory_parent_remove(CaptiveDirectoryObject *captive_directory_object);
-static void captive_directory_parent_object_finalize(CaptiveDirectoryParentObject *captive_directory_parent_object)
+static void captive_directory_parent_object_dispose(CaptiveDirectoryParentObject *captive_directory_parent_object)
{
g_return_if_fail(captive_directory_parent_object!=NULL);
captive_directory_parent_close(CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object)); /* errors ignored */
- G_OBJECT_CLASS(captive_directory_parent_object_parent_class)->finalize((GObject *)captive_directory_parent_object);
+ if (captive_parent_connector_dispose(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object)))
+ return;
+
+ G_OBJECT_CLASS(captive_directory_parent_object_parent_class)->dispose((GObject *)captive_directory_parent_object);
}
+static void captive_directory_parent_object_finalize(CaptiveDirectoryParentObject *captive_directory_parent_object)
+{
+ g_return_if_fail(captive_directory_parent_object!=NULL);
+
+ captive_parent_connector_finalize(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object));
+
+ g_free(captive_directory_parent_object->pathname);
+ captive_directory_parent_object->pathname=NULL;
+
+ G_OBJECT_CLASS(captive_directory_parent_object_parent_class)->finalize((GObject *)captive_directory_parent_object);
+}
static void captive_directory_parent_object_class_init(CaptiveDirectoryParentObjectClass *class)
{
CaptiveDirectoryObjectClass *captive_directory_object_class=CAPTIVE_DIRECTORY_OBJECT_CLASS(class);
captive_directory_parent_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
+ gobject_class->dispose=(void (*)(GObject *object))captive_directory_parent_object_dispose;
gobject_class->finalize=(void (*)(GObject *object))captive_directory_parent_object_finalize;
captive_directory_object_class->read=captive_directory_parent_read;
static GnomeVFSResult (*captive_directory_parent_object_captive_parent_connector_close_orig)
(CaptiveParentConnector *captive_parent_connector);
+static G_CONST_RETURN gchar *captive_directory_parent_object_captive_parent_connector_get_pathname
+ (CaptiveParentConnector *captive_parent_connector);
+
static void captive_directory_parent_object_captive_parent_connector_init(CaptiveParentConnectorIface *captive_parent_connector_iface)
{
g_return_if_fail(CAPTIVE_IS_PARENT_CONNECTOR_CLASS(captive_parent_connector_iface));
captive_directory_parent_object_captive_parent_connector_close_orig=captive_parent_connector_iface->close;
captive_parent_connector_iface->close=captive_directory_parent_object_captive_parent_connector_close;
+
+ captive_parent_connector_iface->get_pathname=captive_directory_parent_object_captive_parent_connector_get_pathname;
}
*captive_directory_object_return=NULL;
return r;
}
+ captive_parent_connector_set_dirty(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object));
*captive_directory_object_return=CAPTIVE_DIRECTORY_OBJECT(captive_directory_parent_object);
return (*captive_directory_parent_object_captive_parent_connector_open_orig)
{
CaptiveDirectoryParentObject *captive_directory_parent_object;
GnomeVFSResult r;
+gint retried=0;
g_return_val_if_fail(CAPTIVE_DIRECTORY_PARENT_IS_OBJECT(captive_directory_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
captive_directory_parent_object=CAPTIVE_DIRECTORY_PARENT_OBJECT(captive_directory_object);
- r=captive_parent_connector_close(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object));
-
- captive_parent_connector_finalize(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object));
-
- g_free(captive_directory_parent_object->pathname);
- captive_directory_parent_object->pathname=NULL;
-
+ do {
+ if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object))))
+ break;
+ if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
+ !=(r=captive_parent_connector_close(CAPTIVE_PARENT_CONNECTOR(captive_directory_parent_object))))
+ break;
+ } while (!retried++);
return r;
}
}
+static G_CONST_RETURN gchar *captive_directory_parent_object_captive_parent_connector_get_pathname
+ (CaptiveParentConnector *captive_parent_connector)
+{
+CaptiveDirectoryParentObject *captive_directory_parent_object;
+
+ g_return_val_if_fail(CAPTIVE_IS_PARENT_CONNECTOR(captive_parent_connector),NULL);
+ g_return_val_if_fail(CAPTIVE_DIRECTORY_PARENT_IS_OBJECT(captive_parent_connector),NULL);
+
+ captive_directory_parent_object=CAPTIVE_DIRECTORY_PARENT_OBJECT(captive_parent_connector);
+
+ g_return_val_if_fail(captive_directory_parent_object->pathname!=NULL,NULL);
+
+ return captive_directory_parent_object->pathname;
+}
+
+
static GnomeVFSResult captive_directory_parent_read
(CaptiveDirectoryObject *captive_directory_object,GnomeVFSFileInfo *file_info)
{