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);  | 
