diff options
author | Danny Kukawka <danny.kukawka@web.de> | 2006-07-10 18:23:04 +0000 |
---|---|---|
committer | Danny Kukawka <danny.kukawka@web.de> | 2006-07-10 18:23:04 +0000 |
commit | a1d40223ae0f32dfcedd5257d829e1b355904385 (patch) | |
tree | 2975a18adb25a5714695251382b9ae3d77c63266 /libhal-storage | |
parent | 9a86d81b9c9328bf7c59fb189326bb36cb91e6ce (diff) |
Fixed libhal_volume_get_size to return volume.size if available instead of
compute the value from volume.block_size and volume.num_blocks which
can be wrong values. Added slightly adopted patch from Wouter Paesen
<wouter@kangaroot.net> to get disc_capacity of a volume via lib (fd.o
bug #6496)
fd.o bug #6496
Diffstat (limited to 'libhal-storage')
-rw-r--r-- | libhal-storage/libhal-storage.c | 18 | ||||
-rw-r--r-- | libhal-storage/libhal-storage.h | 1 |
2 files changed, 17 insertions, 2 deletions
diff --git a/libhal-storage/libhal-storage.c b/libhal-storage/libhal-storage.c index 31f234a3..4d76a5fc 100644 --- a/libhal-storage/libhal-storage.c +++ b/libhal-storage/libhal-storage.c @@ -737,7 +737,6 @@ struct LibHalVolume_s { int msdos_part_table_type; - dbus_bool_t is_disc; LibHalVolumeDiscType disc_type; dbus_bool_t disc_has_audio; @@ -758,6 +757,9 @@ struct LibHalVolume_s { char *crypto_backing_volume; char mount_options[MOUNT_OPTIONS_SIZE]; + + dbus_uint64_t volume_size; + dbus_uint64_t disc_capacity; }; const char * @@ -853,6 +855,7 @@ out: #define LIBHAL_PROP_EXTRACT_BEGIN if (FALSE) #define LIBHAL_PROP_EXTRACT_END ; #define LIBHAL_PROP_EXTRACT_INT(_property_, _where_) else if (strcmp (key, _property_) == 0 && type == LIBHAL_PROPERTY_TYPE_INT32) _where_ = libhal_psi_get_int (&it) +#define LIBHAL_PROP_EXTRACT_UINT64(_property_, _where_) else if (strcmp (key, _property_) == 0 && type == LIBHAL_PROPERTY_TYPE_UINT64) _where_ = libhal_psi_get_uint64 (&it) #define LIBHAL_PROP_EXTRACT_STRING(_property_, _where_) else if (strcmp (key, _property_) == 0 && type == LIBHAL_PROPERTY_TYPE_STRING) _where_ = (libhal_psi_get_string (&it) != NULL && strlen (libhal_psi_get_string (&it)) > 0) ? strdup (libhal_psi_get_string (&it)) : NULL #define LIBHAL_PROP_EXTRACT_BOOL(_property_, _where_) else if (strcmp (key, _property_) == 0 && type == LIBHAL_PROPERTY_TYPE_BOOLEAN) _where_ = libhal_psi_get_bool (&it) #define LIBHAL_PROP_EXTRACT_BOOL_BITFIELD(_property_, _where_, _field_) else if (strcmp (key, _property_) == 0 && type == LIBHAL_PROPERTY_TYPE_BOOLEAN) _where_ |= libhal_psi_get_bool (&it) ? _field_ : 0 @@ -1109,6 +1112,7 @@ libhal_volume_from_udi (LibHalContext *hal_ctx, const char *udi) LIBHAL_PROP_EXTRACT_INT ("volume.block_size", vol->block_size); LIBHAL_PROP_EXTRACT_INT ("volume.num_blocks", vol->num_blocks); + LIBHAL_PROP_EXTRACT_UINT64 ("volume.size", vol->volume_size); LIBHAL_PROP_EXTRACT_STRING ("volume.label", vol->volume_label); LIBHAL_PROP_EXTRACT_STRING ("volume.mount_point", vol->mount_point); LIBHAL_PROP_EXTRACT_STRING ("volume.fstype", vol->fstype); @@ -1127,6 +1131,7 @@ libhal_volume_from_udi (LibHalContext *hal_ctx, const char *udi) LIBHAL_PROP_EXTRACT_BOOL ("volume.disc.is_appendable", vol->disc_is_appendable); LIBHAL_PROP_EXTRACT_BOOL ("volume.disc.is_blank", vol->disc_is_blank); LIBHAL_PROP_EXTRACT_BOOL ("volume.disc.is_rewritable", vol->disc_is_rewritable); + LIBHAL_PROP_EXTRACT_UINT64 ("volume.disc.capacity", vol->disc_capacity); LIBHAL_PROP_EXTRACT_BOOL ("volume.policy.should_mount", vol->should_mount); LIBHAL_PROP_EXTRACT_STRING ("volume.policy.desired_mount_point", vol->desired_mount_point); @@ -1323,7 +1328,16 @@ out: dbus_uint64_t libhal_volume_get_size (LibHalVolume *volume) { - return ((dbus_uint64_t)volume->block_size) * ((dbus_uint64_t)volume->num_blocks); + if (volume->volume_size > 0) + return volume->volume_size; + else + return ((dbus_uint64_t)volume->block_size) * ((dbus_uint64_t)volume->num_blocks): +} + +dbus_uint64_t +libhal_volume_get_disc_capacity (LibHalVolume *volume) +{ + return volume->disc_capacity; } diff --git a/libhal-storage/libhal-storage.h b/libhal-storage/libhal-storage.h index 7ffacc38..700955a7 100644 --- a/libhal-storage/libhal-storage.h +++ b/libhal-storage/libhal-storage.h @@ -273,6 +273,7 @@ LibHalVolume *libhal_volume_from_device_file (LibHalContext *ha const char *device_file); void libhal_volume_free (LibHalVolume *volume); dbus_uint64_t libhal_volume_get_size (LibHalVolume *volume); +dbus_uint64_t libhal_volume_get_disc_capacity (LibHalVolume *volume); const char *libhal_volume_get_udi (LibHalVolume *volume); const char *libhal_volume_get_device_file (LibHalVolume *volume); |