Initial original import from: fuse-2.4.2-2.fc4
[captive.git] / src / libcaptive / client / vfs.c
index 9b29ec3..180f389 100644 (file)
 #include "captive/client-vfs.h"        /* self */
 #include "vfs.h"       /* self-priv */
 #include <glib/gmessages.h>
-#include "captive/macros.h"
+#include "vfs-parent.h"
+#include "vfs-slave.h"
 #include "init.h"
-#include "captive/parent-Vfs.h"
-#include "../sandbox/server-Vfs.h"     /* for captive_corba_child_options */
+#include "lib.h"       /* for captive_giochannel_setup() */
+#include <unistd.h>
+#include <string.h>
 
 
 static gpointer captive_vfs_object_parent_class=NULL;
@@ -47,16 +49,14 @@ static void captive_vfs_object_class_init(CaptiveVfsObjectClass *class)
 {
 GObjectClass *gobject_class=G_OBJECT_CLASS(class);
 
-       captive_vfs_object_parent_class=g_type_class_ref(G_TYPE_OBJECT);
+       captive_vfs_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
        gobject_class->finalize=(void (*)(GObject *object))captive_vfs_object_finalize;
 }
 
 
 static void captive_vfs_object_init(CaptiveVfsObject *captive_vfs_object)
 {
-       CAPTIVE_MEMZERO(&captive_vfs_object->options);
-
-       captive_vfs_object->corba_parent_giochanel_blind=NULL;
+       captive_options_init(&captive_vfs_object->options);
 }
 
 
@@ -78,84 +78,69 @@ static const GTypeInfo captive_vfs_object_info={
                                };
 
                captive_vfs_object_type=g_type_register_static(G_TYPE_OBJECT,
-                               "CaptiveVfsObject",&captive_vfs_object_info,0);
+                               "CaptiveVfsObject",&captive_vfs_object_info,G_TYPE_FLAG_ABSTRACT);
                }
 
        return captive_vfs_object_type;
 }
 
 
-static void    log_discard_func(const gchar *log_domain,GLogLevelFlags log_level,const gchar *message,gpointer user_data)
-{
-       /* NOP */
-}
-
 GnomeVFSResult captive_vfs_new
                (CaptiveVfsObject **captive_vfs_object_return,const struct captive_options *options)
 {
 CaptiveVfsObject *captive_vfs_object;
-gboolean errbool;
 
        g_return_val_if_fail(captive_vfs_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(options!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
-       /* Here is the first initializaton point of parent in sandboxed mode. */
-       if (!options->debug_messages) {
-               g_log_set_handler(
-                               G_LOG_DOMAIN,   /* log_domain; "Captive" */
-                               0       /* log_levels */
-                                               | G_LOG_FLAG_RECURSION
-                                               | G_LOG_FLAG_FATAL
-                                               /* The same mask is in:
-                                                * libcaptive/sandbox/server-GLogFunc.c
-                                                * libcaptive/client/init.c
-                                                * libcaptive/client/vfs.c
-                                                */
-                                               | G_LOG_LEVEL_MESSAGE
-                                               | G_LOG_LEVEL_INFO
-                                               | G_LOG_LEVEL_DEBUG,
-                               log_discard_func,       /* log_func */
-                               NULL);  /* user_data */
+#ifndef MAINTAINER_MODE
+       /* We are not sandboxing || we are the master */
+       if (!options->sandbox || (options->sandbox_server_argv || options->sandbox_server_ior)) {
+int fd;
+
+               /* Shameless advertisement: */
+               for (fd=2 /* STDERR */;fd>=1 /* STDOUT */;fd--) {
+                       if (isatty(fd)) {
+const gchar *msg="Captive NTFS v" VERSION ".  Check a new version at: http://www.jankratochvil.net/\n";
+
+                               /* Prevent: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result */
+                               if (strlen(msg)==write(fd,msg,strlen(msg)))
+                                       break;
+                               }
+                       }
                }
+#endif /* !MAINTAINER_MODE */
 
-       *captive_vfs_object_return=NULL;
-
-       captive_vfs_object=g_object_new(
-                       CAPTIVE_VFS_TYPE_OBJECT,        /* object_type */
-                       NULL);  /* first_property_name; FIXME: support properties */
-
-       captive_options_copy(&captive_vfs_object->options,options);
+       /* Here is the first initializaton point of parent in sandboxed mode. */
+       captive_log_init(options);
 
-       *captive_vfs_object_return=captive_vfs_object;
+       *captive_vfs_object_return=NULL;
 
        /* We are sandboxing && we are the master */
        if (options->sandbox && (options->sandbox_server_argv || options->sandbox_server_ior))
-               return captive_sandbox_parent_vfs_new(captive_vfs_object);
+               captive_vfs_object=g_object_new(
+                               CAPTIVE_VFS_PARENT_TYPE_OBJECT, /* object_type */
+                               NULL);  /* first_property_name; FIXME: support properties */
+       else
+               captive_vfs_object=g_object_new(
+                               CAPTIVE_VFS_SLAVE_TYPE_OBJECT,  /* object_type */
+                               NULL);  /* first_property_name; FIXME: support properties */
 
-       g_assert(captive_options==NULL);
-       captive_options=&captive_vfs_object->options;
+       captive_options_copy(&captive_vfs_object->options,options);
 
-       errbool=captive_init();
-       g_assert(errbool==TRUE);
+       if (captive_vfs_object->options.image_iochannel)
+               captive_giochannel_setup(captive_vfs_object->options.image_iochannel);
 
-       return GNOME_VFS_OK;
+       *captive_vfs_object_return=captive_vfs_object;
+
+       return (*CAPTIVE_VFS_OBJECT_GET_CLASS(captive_vfs_object)->init)(captive_vfs_object);
 }
 
 
 static GnomeVFSResult captive_vfs_close(CaptiveVfsObject *captive_vfs_object)
 {
-gboolean errbool;
-
-       g_return_val_if_fail(captive_vfs_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
-
-       if (captive_vfs_object->is_sandbox_parent)
-               return captive_sandbox_parent_vfs_close(captive_vfs_object);
+       g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
 
-       g_assert(captive_options==&captive_vfs_object->options);
-       errbool=captive_shutdown();
-       g_assert(errbool==TRUE);
-
-       captive_options=NULL;
        captive_options_free(&captive_vfs_object->options);
 
        return GNOME_VFS_OK;
@@ -164,11 +149,16 @@ gboolean errbool;
 
 GnomeVFSResult captive_vfs_commit(CaptiveVfsObject *captive_vfs_object)
 {
-       g_return_val_if_fail(captive_vfs_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
 
-       if (captive_vfs_object->is_sandbox_parent)
-               return captive_sandbox_parent_vfs_commit(captive_vfs_object);
+       return (*CAPTIVE_VFS_OBJECT_GET_CLASS(captive_vfs_object)->commit)(captive_vfs_object);
+}
 
-       /* We do not buffer any data if not in sandboxed mode. */
-       return GNOME_VFS_OK;
+
+GnomeVFSResult captive_vfs_volume_info_get(CaptiveVfsObject *captive_vfs_object,CaptiveVfsVolumeInfo *volume_info)
+{
+       g_return_val_if_fail(CAPTIVE_VFS_IS_OBJECT(captive_vfs_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
+       g_return_val_if_fail(volume_info!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+       return (*CAPTIVE_VFS_OBJECT_GET_CLASS(captive_vfs_object)->volume_info_get)(captive_vfs_object,volume_info);
 }