X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=src%2Flibcaptive%2Fclient%2Fvfs.c;h=180f389f8a30425ff27ae8abea13e7a00c409bae;hb=a2dd38f86df22c46ae18f3ad7d9850eaacb02b92;hp=9b29ec3b1283c416b612e0dc409e1ef173bc7e7a;hpb=b13be489950f821f742e946fff8fe27f6faea531;p=captive.git diff --git a/src/libcaptive/client/vfs.c b/src/libcaptive/client/vfs.c index 9b29ec3..180f389 100644 --- a/src/libcaptive/client/vfs.c +++ b/src/libcaptive/client/vfs.c @@ -22,10 +22,12 @@ #include "captive/client-vfs.h" /* self */ #include "vfs.h" /* self-priv */ #include -#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 +#include 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); }