mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-01 15:03:39 +02:00
Provide eject() on both GMount and GVolume and utility functions to guess
2007-12-14 David Zeuthen <davidz@redhat.com> * Makefile.am: * gio.symbols: * gmount.c: (g_mount_get_uuid), (g_mount_can_eject), (g_mount_eject), (g_mount_eject_finish): * gmount.h: * gunionvolumemonitor.c: (g_union_volume_monitor_finalize), (get_volume_for_uuid), (get_mount_for_uuid), (g_union_volume_monitor_class_init), (get_default_native_type_with_exclude), (get_default_native_type), (get_native_type), (update_native_type), (g_union_volume_monitor_init), (_g_mount_get_for_mount_path): * gunixmount.c: (_g_unix_mount_new), (g_unix_mount_get_uuid), (g_unix_mount_can_eject), (eject_unmount_cb), (eject_unmount_read_error), (eject_unmount_do), (g_unix_mount_unmount), (g_unix_mount_eject), (g_unix_mount_eject_finish), (g_unix_mount_mount_iface_init): * gunixmounts.c: (g_unix_mount_guess_can_eject), (g_unix_mount_point_guess_can_eject): * gunixmounts.h: * gunixvolume.c: (_g_unix_volume_new), (g_unix_volume_get_uuid), (g_unix_volume_can_eject), (g_unix_volume_get_drive), (eject_mount_cb), (eject_mount_read_error), (eject_mount_do), (g_unix_volume_mount), (g_unix_volume_eject), (g_unix_volume_eject_finish), (g_unix_volume_volume_iface_init): * gunixvolumemonitor.c: (get_volume_for_uuid), (get_mount_for_uuid), (g_unix_volume_monitor_class_init), (update_mounts): * gvolume.c: (g_volume_get_uuid), (g_volume_can_eject), (g_volume_eject), (g_volume_eject_finish): * gvolume.h: * gvolumemonitor.c: (g_volume_monitor_get_volume_for_uuid), (g_volume_monitor_get_mount_for_uuid): * gvolumemonitor.h: Provide eject() on both GMount and GVolume and utility functions to guess whether a GUnixMountPoint or GUnixMountEntry should be ejected. Introduce the concept of UUID's and wire it into GVolume and GMount and provide API on GVolumeMonitor to find such instances. Also handle the case where an external GNativeVolumeMonitor fails to initialize. Lock around the _g_get_mount_for_mount_path() function such that volume monitor implementations won't have to do locking themselves. svn path=/trunk/; revision=6140
This commit is contained in:
committed by
Alexander Larsson
parent
96a0e238e5
commit
f4add8f0fa
120
gio/gmount.c
120
gio/gmount.c
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* GIO - GLib Input, Output and Streaming Library
|
||||
*
|
||||
* Copyright (C) 2006-2007 Red Hat, Inc.
|
||||
@@ -22,6 +24,9 @@
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "gmount.h"
|
||||
#include "gmountprivate.h"
|
||||
#include "gsimpleasyncresult.h"
|
||||
@@ -175,7 +180,30 @@ g_mount_get_icon (GMount *mount)
|
||||
|
||||
return (* iface->get_icon) (mount);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* g_mount_get_uuid:
|
||||
* @mount: a #GMount.
|
||||
*
|
||||
* Gets the UUID for the @mount. The reference is typically based on
|
||||
* the file system UUID for the mount in question and should be
|
||||
* considered an opaque string. Returns %NULL if there is no UUID
|
||||
* available.
|
||||
*
|
||||
* Returns: the UUID for @mount or %NULL if no UUID can be computed.
|
||||
**/
|
||||
char *
|
||||
g_mount_get_uuid (GMount *mount)
|
||||
{
|
||||
GMountIface *iface;
|
||||
|
||||
g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
|
||||
|
||||
iface = G_MOUNT_GET_IFACE (mount);
|
||||
|
||||
return (* iface->get_uuid) (mount);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_mount_get_volume:
|
||||
* @mount: a #GMount.
|
||||
@@ -239,6 +267,26 @@ g_mount_can_unmount (GMount *mount)
|
||||
return (* iface->can_unmount) (mount);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_mount_can_eject:
|
||||
* @mount: a #GMount.
|
||||
*
|
||||
* Checks if @mount can be eject.
|
||||
*
|
||||
* Returns: %TRUE if the @mount can be ejected.
|
||||
**/
|
||||
gboolean
|
||||
g_mount_can_eject (GMount *mount)
|
||||
{
|
||||
GMountIface *iface;
|
||||
|
||||
g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
|
||||
|
||||
iface = G_MOUNT_GET_IFACE (mount);
|
||||
|
||||
return (* iface->can_eject) (mount);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_mount_unmount:
|
||||
* @mount: a #GMount.
|
||||
@@ -308,5 +356,75 @@ g_mount_unmount_finish (GMount *mount,
|
||||
return (* iface->unmount_finish) (mount, result, error);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* g_mount_eject:
|
||||
* @mount: a #GMount.
|
||||
* @cancellable: optional #GCancellable object, %NULL to ignore.
|
||||
* @callback: a #GAsyncReadyCallback.
|
||||
* @user_data: user data passed to @callback.
|
||||
*
|
||||
* Ejects a mount. This is an asynchronous operation, and is
|
||||
* finished by calling g_mount_eject_finish() with the @mount
|
||||
* and #GAsyncResults data returned in the @callback.
|
||||
**/
|
||||
void
|
||||
g_mount_eject (GMount *mount,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
GMountIface *iface;
|
||||
|
||||
g_return_if_fail (G_IS_MOUNT (mount));
|
||||
|
||||
iface = G_MOUNT_GET_IFACE (mount);
|
||||
|
||||
if (iface->eject == NULL)
|
||||
{
|
||||
g_simple_async_report_error_in_idle (G_OBJECT (mount),
|
||||
callback, user_data,
|
||||
G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
_("mount doesn't implement eject"));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
(* iface->eject) (mount, cancellable, callback, user_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_mount_eject_finish:
|
||||
* @mount: a #GMount.
|
||||
* @result: a #GAsyncResult.
|
||||
* @error: a #GError location to store the error occuring, or %NULL to
|
||||
* ignore.
|
||||
*
|
||||
* Finishes ejecting a mount. If any errors occured during the operation,
|
||||
* @error will be set to contain the errors and %FALSE will be returned.
|
||||
*
|
||||
* Returns: %TRUE if the mount was successfully ejected. %FALSE otherwise.
|
||||
**/
|
||||
gboolean
|
||||
g_mount_eject_finish (GMount *mount,
|
||||
GAsyncResult *result,
|
||||
GError **error)
|
||||
{
|
||||
GMountIface *iface;
|
||||
|
||||
g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
|
||||
g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
|
||||
|
||||
if (G_IS_SIMPLE_ASYNC_RESULT (result))
|
||||
{
|
||||
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
|
||||
if (g_simple_async_result_propagate_error (simple, error))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
iface = G_MOUNT_GET_IFACE (mount);
|
||||
return (* iface->eject_finish) (mount, result, error);
|
||||
}
|
||||
|
||||
#define __G_MOUNT_C__
|
||||
#include "gioaliasdef.c"
|
||||
|
Reference in New Issue
Block a user