[PATCH] up-device-supply.c: Fix #27902 Bug - Daemon Segmentation Fault
Mariusz Ceier
mceier at gmail.com
Fri Jul 2 04:23:16 PDT 2010
In linux backend, g_object_set was called with wrong
argument types for time-to-empty,time-to-full and percentage
properties. This patch uses explicit casts in the same way as freebsd
backend.
Signed-off-by: Mariusz Ceier <mceier at gmail.com>
---
src/linux/up-device-hid.c | 2 +-
src/linux/up-device-supply.c | 26 +++++++++++++-------------
src/org.freedesktop.UPower.Device.xml | 4 ++--
src/up-device.c | 16 ++++++++--------
4 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/src/linux/up-device-hid.c b/src/linux/up-device-hid.c
index e77be8e..3bdd12d 100644
--- a/src/linux/up-device-hid.c
+++ b/src/linux/up-device-hid.c
@@ -192,7 +192,7 @@ up_device_hid_set_values (UpDeviceHid *hid, int code, int value)
g_object_set (device, "percentage", (gfloat) value, NULL);
break;
case UP_DEVICE_HID_RUNTIME_TO_EMPTY:
- g_object_set (device, "time-to-empty", (gint64) value, NULL);
+ g_object_set (device, "time-to-empty", (guint64) value, NULL);
break;
case UP_DEVICE_HID_CHARGING:
if (value != 0)
diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
index ec405f4..f70e6b4 100644
--- a/src/linux/up-device-supply.c
+++ b/src/linux/up-device-supply.c
@@ -104,25 +104,25 @@ up_device_supply_reset_values (UpDeviceSupply *supply)
"vendor", NULL,
"model", NULL,
"serial", NULL,
- "update-time", 0,
+ "update-time", (guint64) 0,
"power-supply", FALSE,
"online", FALSE,
- "energy", 0.0,
+ "energy", (gdouble) 0.0,
"is-present", FALSE,
"is-rechargeable", FALSE,
"has-history", FALSE,
"has-statistics", FALSE,
- "state", NULL,
- "capacity", 0.0,
- "energy-empty", 0.0,
- "energy-full", 0.0,
- "energy-full-design", 0.0,
- "energy-rate", 0.0,
- "voltage", 0.0,
- "time-to-empty", 0,
- "time-to-full", 0,
- "percentage", 0,
- "technology", NULL,
+ "state", UP_DEVICE_STATE_UNKNOWN,
+ "capacity", (gdouble) 0.0,
+ "energy-empty", (gdouble) 0.0,
+ "energy-full", (gdouble) 0.0,
+ "energy-full-design", (gdouble) 0.0,
+ "energy-rate", (gdouble) 0.0,
+ "voltage", (gdouble) 0.0,
+ "time-to-empty", (guint64) 0,
+ "time-to-full", (guint64) 0,
+ "percentage", (gdouble) 0.0,
+ "technology", UP_DEVICE_TECHNOLOGY_UNKNOWN,
NULL);
}
diff --git a/src/org.freedesktop.UPower.Device.xml b/src/org.freedesktop.UPower.Device.xml
index 7c9a65b..d9bee54 100644
--- a/src/org.freedesktop.UPower.Device.xml
+++ b/src/org.freedesktop.UPower.Device.xml
@@ -95,11 +95,11 @@ method return sender=:1.386 -> dest=:1.477 reply_serial=2
)
dict entry(
string "time-to-empty"
- variant int64 0
+ variant uint64 0
)
dict entry(
string "time-to-full"
- variant int64 0
+ variant uint64 0
)
dict entry(
string "percentage"
diff --git a/src/up-device.c b/src/up-device.c
index a6de925..631f902 100644
--- a/src/up-device.c
+++ b/src/up-device.c
@@ -238,10 +238,10 @@ up_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSpe
g_value_set_double (value, device->priv->voltage);
break;
case PROP_TIME_TO_EMPTY:
- g_value_set_int64 (value, device->priv->time_to_empty);
+ g_value_set_uint64 (value, device->priv->time_to_empty);
break;
case PROP_TIME_TO_FULL:
- g_value_set_int64 (value, device->priv->time_to_full);
+ g_value_set_uint64 (value, device->priv->time_to_full);
break;
case PROP_PERCENTAGE:
g_value_set_double (value, device->priv->percentage);
@@ -338,10 +338,10 @@ up_device_set_property (GObject *object, guint prop_id, const GValue *value, GPa
device->priv->voltage = g_value_get_double (value);
break;
case PROP_TIME_TO_EMPTY:
- device->priv->time_to_empty = g_value_get_int64 (value);
+ device->priv->time_to_empty = g_value_get_uint64 (value);
break;
case PROP_TIME_TO_FULL:
- device->priv->time_to_full = g_value_get_int64 (value);
+ device->priv->time_to_full = g_value_get_uint64 (value);
break;
case PROP_PERCENTAGE:
device->priv->percentage = g_value_get_double (value);
@@ -1136,16 +1136,16 @@ up_device_class_init (UpDeviceClass *klass)
*/
g_object_class_install_property (object_class,
PROP_TIME_TO_EMPTY,
- g_param_spec_int64 ("time-to-empty", NULL, NULL,
- 0, G_MAXINT64, 0,
+ g_param_spec_uint64 ("time-to-empty", NULL, NULL,
+ 0, G_MAXUINT64, 0,
G_PARAM_READWRITE));
/**
* UpDevice:time-to-full:
*/
g_object_class_install_property (object_class,
PROP_TIME_TO_FULL,
- g_param_spec_int64 ("time-to-full", NULL, NULL,
- 0, G_MAXINT64, 0,
+ g_param_spec_uint64 ("time-to-full", NULL, NULL,
+ 0, G_MAXUINT64, 0,
G_PARAM_READWRITE));
/**
* UpDevice:percentage:
--
1.7.1.1
More information about the devkit-devel
mailing list