Also unify code for determing device size for Lun and BlockDevice.
Signed-off-by: David Zeuthen <davidz@redhat.com>
<FILE>udisksdaemonutil</FILE>
udisks_decode_udev_string
udisks_safe_append_to_object_path
+udisks_daemon_util_block_get_size
</SECTION>
#include <gio/gio.h>
#include <polkit/polkit.h>
#include <udisks/udisks.h>
+#include <gudev/gudev.h>
#include <gdbusobjectmanager.h>
#include <sys/types.h>
#include "config.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
#include "udisksdaemonutil.h"
/**
}
}
}
+
+/**
+ * udisks_daemon_util_block_get_size:
+ * @device: A #GUdevDevice for a top-level block device.
+ *
+ * Gets the size of the @device top-level block device, checking for media in the process
+ *
+ * Returns: The size of @device or 0 if no media is available.
+ */
+guint64
+udisks_daemon_util_block_get_size (GUdevDevice *device)
+{
+ gboolean media_available;
+
+ /* figuring out if media is available is a bit tricky */
+ media_available = FALSE;
+ if (g_udev_device_get_sysfs_attr_as_boolean (device, "removable"))
+ {
+ /* never try to open optical drives (might cause the door to close) or
+ * floppy drives (makes noise)
+ */
+ media_available = FALSE;
+ if (!(g_udev_device_get_property_as_boolean (device, "ID_CDROM") ||
+ g_udev_device_get_property_as_boolean (device, "ID_DRIVE_FLOPPY")))
+ {
+ gint fd;
+ fd = open (g_udev_device_get_device_file (device), O_RDONLY);
+ if (fd >= 0)
+ {
+ media_available = TRUE;
+ close (fd);
+ }
+ }
+ else
+ {
+ if (g_udev_device_get_property_as_boolean (device, "ID_CDROM_MEDIA"))
+ media_available = TRUE;
+ else
+ media_available = FALSE;
+ }
+ }
+ else
+ {
+ media_available = TRUE;
+ }
+
+ if (media_available)
+ return g_udev_device_get_sysfs_attr_as_uint64 (device, "size") * 512;
+ else
+ return 0;
+}
+
void udisks_safe_append_to_object_path (GString *str,
const gchar *s);
+guint64 udisks_daemon_util_block_get_size (GUdevDevice *block_device);
+
+
G_END_DECLS
udisks_block_device_set_symlinks (iface, symlinks);
udisks_block_device_set_major (iface, major (dev));
udisks_block_device_set_minor (iface, minor (dev));
- udisks_block_device_set_size (iface, g_udev_device_get_sysfs_attr_as_uint64 (block->device, "size") * 512);
+ udisks_block_device_set_size (iface, udisks_daemon_util_block_get_size (block->device));
if (g_str_has_prefix (g_udev_device_get_name (block->device), "loop"))
{
#include "config.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
#include <string.h>
#include "udisksdaemon.h"
}
static void
-lun_set_size (UDisksLinuxLun *lun,
- UDisksLun *iface,
- GUdevDevice *device)
-{
- gboolean media_available;
-
- /* figuring out if media is available is a bit tricky */
- media_available = FALSE;
- if (udisks_lun_get_media_removable (iface))
- {
- /* never try to open optical drives (might cause the door to close) or
- * floppy drives (makes noise)
- */
- media_available = FALSE;
- if (!(g_udev_device_get_property_as_boolean (device, "ID_CDROM") ||
- g_udev_device_get_property_as_boolean (device, "ID_DRIVE_FLOPPY")))
- {
- gint fd;
- fd = open (g_udev_device_get_device_file (device), O_RDONLY);
- if (fd >= 0)
- {
- media_available = TRUE;
- close (fd);
- }
- }
- else
- {
- if (g_udev_device_get_property_as_boolean (device, "ID_CDROM_MEDIA"))
- media_available = TRUE;
- else
- media_available = FALSE;
- }
- }
- else
- {
- media_available = TRUE;
- }
-
- if (media_available)
- udisks_lun_set_size (iface, g_udev_device_get_sysfs_attr_as_uint64 (device, "size") * 512);
- else
- udisks_lun_set_size (iface, 0);
-}
-
-
-static void
lun_set_rotation_rate (UDisksLinuxLun *lun,
UDisksLun *iface,
GUdevDevice *device)
/* common bits go here */
udisks_lun_set_media_removable (iface, g_udev_device_get_sysfs_attr_as_boolean (device, "removable"));
- lun_set_size (lun, iface, device);
+ udisks_lun_set_size (iface, udisks_daemon_util_block_get_size (device));
lun_set_media (lun, iface, device);
lun_set_rotation_rate (lun, iface, device);
out: