Hello community, here is the log from the commit of package gnome-vfs2 checked in at Fri Jun 2 01:52:31 CEST 2006. -------- --- GNOME/gnome-vfs2/gnome-vfs2.changes 2006-05-19 17:44:55.000000000 +0200 +++ gnome-vfs2/gnome-vfs2.changes 2006-06-01 19:52:13.000000000 +0200 @@ -1,0 +2,7 @@ +Thu Jun 1 19:51:53 CEST 2006 - federico@novell.com + +- Added gnome-vfs2-172870-unmount-uses-hal-udi-from-drive.diff to fix + part of https://bugzilla.novell.com/show_bug.cgi?id=172870. This + makes unmounting floppy drives work correctly. + +------------------------------------------------------------------- New: ---- gnome-vfs2-172870-unmount-uses-hal-udi-from-drive.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnome-vfs2.spec ++++++ --- /var/tmp/diff_new_pack.RPRyDH/_old 2006-06-02 01:52:20.000000000 +0200 +++ /var/tmp/diff_new_pack.RPRyDH/_new 2006-06-02 01:52:20.000000000 +0200 @@ -19,7 +19,7 @@ Requires: gnome-mime-data Autoreqprov: on Version: 2.12.2 -Release: 59 +Release: 61 Summary: The GNOME 2.x Desktop Virtual File System Libraries URL: http://www.gnome.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -50,6 +50,7 @@ Patch31: gnome-vfs2-171156-ftp-large-files.diff Patch32: gnome-vfs2-149355-novfs-is-not-local.diff Patch33: gnome-vfs2-smb-bufsize.patch +Patch34: gnome-vfs2-172870-unmount-uses-hal-udi-from-drive.diff Obsoletes: gnome-vfs-extras Provides: gnome-vfs-extras @@ -159,6 +160,7 @@ %patch31 -p1 %patch32 -p1 %patch33 -p1 +%patch34 -p1 gnome-patch-translation-update # These patches have it's own translation management: %patch20 @@ -266,6 +268,10 @@ %{prefix}/share/gtk-doc/html/gnome-vfs-2.0 %changelog -n gnome-vfs2 +* Thu Jun 01 2006 - federico@novell.com +- Added gnome-vfs2-172870-unmount-uses-hal-udi-from-drive.diff to fix + part of https://bugzilla.novell.com/show_bug.cgi?id=172870. This + makes unmounting floppy drives work correctly. * Fri May 19 2006 - dave@suse.de - Work around a problem with samba servers not liking to return
64k bytes.
++++++ gnome-vfs2-172870-unmount-uses-hal-udi-from-drive.diff ++++++ 2006-05-23 Federico Mena Quintero <federico@novell.com> * libgnomevfs/gnome-vfs-volume-ops.c (mount_unmount_operation): See if the HAL property "volume.mount.valid_options" has "uid=". In this case, add an uid option to our dbus message. This makes the mount be writable by the user. 2006-05-22 Federico Mena Quintero <federico@novell.com> * libgnomevfs/gnome-vfs-volume-ops.c (dispatch_callback_idle_cb): Call force_probe() before calling the user's callback, in a similar fashion to report_mount_result(). We need this so that the volume monitor will update itself. This way the user's callback will get a consistent view of the volume monitor's state. (force_probe): Move outside of the "#if !defined (USE_HAL)" block. 2006-05-21 Federico Mena Quintero <federico@novell.com> * libgnomevfs/gnome-vfs-volume-ops.c (gnome_vfs_volume_unmount): If the volume doesn't have a HAL UDI, get it from the corresponding drive. This is merged from CVS. Fixes the gnome-vfs part of https://bugzilla.novell.com/show_bug.cgi?id=172870 --- gnome-vfs/libgnomevfs/gnome-vfs-volume-ops.c.orig 2006-05-21 20:12:34.000000000 -0500 +++ gnome-vfs/libgnomevfs/gnome-vfs-volume-ops.c 2006-05-21 20:13:49.000000000 -0500 @@ -89,6 +89,37 @@ enum { UNMOUNT = 0x4, }; +static void +force_probe (void) +{ + GnomeVFSVolumeMonitor *volume_monitor; + GnomeVFSClient *client; + GNOME_VFS_Daemon daemon; + CORBA_Environment ev; + GnomeVFSDaemonForceProbeCallback callback; + + volume_monitor = gnome_vfs_get_volume_monitor (); + + if (gnome_vfs_get_is_daemon ()) { + callback = _gnome_vfs_get_daemon_force_probe_callback(); + (*callback) (GNOME_VFS_VOLUME_MONITOR (volume_monitor)); + } else { + client = _gnome_vfs_get_client (); + daemon = _gnome_vfs_client_get_daemon (client); + + if (daemon != CORBA_OBJECT_NIL) { + CORBA_exception_init (&ev); + GNOME_VFS_Daemon_forceProbe (daemon, + BONOBO_OBJREF (client), + &ev); + if (BONOBO_EX (&ev)) { + CORBA_exception_free (&ev); + } + CORBA_Object_release (daemon, NULL); + } + } +} + #if !defined (USE_HAL) && !defined (G_OS_WIN32) typedef struct { @@ -155,37 +186,6 @@ generate_unmount_error_message (char *st return message; } -static void -force_probe (void) -{ - GnomeVFSVolumeMonitor *volume_monitor; - GnomeVFSClient *client; - GNOME_VFS_Daemon daemon; - CORBA_Environment ev; - GnomeVFSDaemonForceProbeCallback callback; - - volume_monitor = gnome_vfs_get_volume_monitor (); - - if (gnome_vfs_get_is_daemon ()) { - callback = _gnome_vfs_get_daemon_force_probe_callback(); - (*callback) (GNOME_VFS_VOLUME_MONITOR (volume_monitor)); - } else { - client = _gnome_vfs_get_client (); - daemon = _gnome_vfs_client_get_daemon (client); - - if (daemon != CORBA_OBJECT_NIL) { - CORBA_exception_init (&ev); - GNOME_VFS_Daemon_forceProbe (daemon, - BONOBO_OBJREF (client), - &ev); - if (BONOBO_EX (&ev)) { - CORBA_exception_free (&ev); - } - CORBA_Object_release (daemon, NULL); - } - } -} - static gboolean report_mount_result (gpointer callback_data) { @@ -359,6 +359,14 @@ dispatch_callback_idle_cb (gpointer data closure = data; + /* fprintf (stderr, "LOG: gnome-vfs dispatch_callback_idle_cb(): d-bus call %s. Calling force_probe().\n", + closure->succeeded ? "SUCCEDED" : "FAILED"); */ + + /* We want to force probing here so that the daemon + can refresh and tell us (and everyone else) of the new + volume before we call the callback */ + force_probe (); + (* closure->callback) (closure->succeeded, closure->error_message, closure->detailed_error_message, @@ -388,6 +396,46 @@ queue_dispatch_callback (gboolean succee g_idle_add (dispatch_callback_idle_cb, closure); } +#ifdef USE_HAL +static gboolean +uid_is_valid_option (DBusConnection *dbus_ctx, const char *hal_udi) +{ + LibHalContext *hal_ctx; + DBusError error; + char **options; + char **p; + gboolean retval; + + hal_ctx = libhal_ctx_new (); + if (!hal_ctx) + return FALSE; + + libhal_ctx_set_dbus_connection (hal_ctx, dbus_ctx); + + dbus_error_init (&error); + + if (!libhal_ctx_init (hal_ctx, &error)) { + dbus_error_free (&error); + libhal_ctx_free (hal_ctx); + return FALSE; + } + + retval = FALSE; + + options = libhal_device_get_property_strlist (hal_ctx, hal_udi, "volume.mount.valid_options", NULL); + for (p = options; *p; p++) { + if (strcmp (*p, "uid=") == 0) + retval = TRUE; + } + libhal_free_string_array (options); + + libhal_ctx_shutdown (hal_ctx, NULL); + libhal_ctx_free (hal_ctx); + + return retval; +} +#endif + static void mount_unmount_operation (const char *mount_point, const char *device_path, @@ -427,17 +475,28 @@ mount_unmount_operation (const char *mou } if ((flags & MOUNT)) { - char *options[] = { NULL }; + GPtrArray *options; char *mount_point = ""; char *fstype = ""; - + char uid[32]; + + options = g_ptr_array_new (); + + if (uid_is_valid_option (dbus_ctx, hal_udi)) { + g_snprintf (uid, sizeof (uid), "uid=%d", getuid ()); + g_ptr_array_add (options, uid); + } + if (!dbus_message_append_args (dmesg, DBUS_TYPE_STRING, &mount_point, DBUS_TYPE_STRING, &fstype, - DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &options, 0, DBUS_TYPE_INVALID)) { + DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &options->pdata, options->len, DBUS_TYPE_INVALID)) { queue_dispatch_callback (FALSE, _("Could not append args to dbus message"), method, callback, user_data); g_warning ("Mount failed for %s: could not append args to dbus message", hal_udi); dbus_message_unref (dmesg); + g_ptr_array_free (options, TRUE); goto exception; } + + g_ptr_array_free (options, TRUE); } if ((flags & UNMOUNT)) { @@ -666,14 +725,27 @@ gnome_vfs_volume_unmount (GnomeVFSVolume type = gnome_vfs_volume_get_volume_type (volume); if (type == GNOME_VFS_VOLUME_TYPE_MOUNTPOINT) { + char *hal_udi; + uri = gnome_vfs_volume_get_activation_uri (volume); mount_path = gnome_vfs_get_local_path_from_uri (uri); g_free (uri); device_path = gnome_vfs_volume_get_device_path (volume); filesystem_type = gnome_vfs_volume_get_filesystem_type (volume); + + hal_udi = gnome_vfs_volume_get_hal_udi (volume); + if (hal_udi == NULL) { + GnomeVFSDrive *drive; + drive = gnome_vfs_volume_get_drive (volume); + if (drive != NULL) { + hal_udi = gnome_vfs_drive_get_hal_udi (drive); + gnome_vfs_drive_unref (drive); + } + } + mount_unmount_operation (mount_path, device_path, - gnome_vfs_volume_get_hal_udi (volume), + hal_udi, filesystem_type, gnome_vfs_volume_get_device_type (volume), UNMOUNT, @@ -681,6 +753,7 @@ gnome_vfs_volume_unmount (GnomeVFSVolume g_free (mount_path); g_free (device_path); g_free (filesystem_type); + g_free (hal_udi); } else { unmount_connected_server (volume, callback, user_data); } ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit-unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit-help@opensuse.org