[PATCH] up-device-supply.c: Fix #27902 Bug - Daemon Segmentation Fault
Mariusz Ceier
mceier at gmail.com
Fri Jul 2 04:50:40 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>
---
devkit-power-gobject/dkp-device.c | 20 ++++++++++----------
libupower-glib/up-device.c | 16 ++++++++--------
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 ++++++++--------
6 files changed, 42 insertions(+), 42 deletions(-)
diff --git a/devkit-power-gobject/dkp-device.c b/devkit-power-gobject/dkp-device.c
index 6f1e569..70126e0 100644
--- a/devkit-power-gobject/dkp-device.c
+++ b/devkit-power-gobject/dkp-device.c
@@ -181,9 +181,9 @@ dkp_device_collect_props_cb (const char *key, const GValue *value, DkpDevice *de
} else if (g_strcmp0 (key, "Voltage") == 0) {
device->priv->voltage = g_value_get_double (value);
} else if (g_strcmp0 (key, "TimeToFull") == 0) {
- device->priv->time_to_full = g_value_get_int64 (value);
+ device->priv->time_to_full = g_value_get_uint64 (value);
} else if (g_strcmp0 (key, "TimeToEmpty") == 0) {
- device->priv->time_to_empty = g_value_get_int64 (value);
+ device->priv->time_to_empty = g_value_get_uint64 (value);
} else if (g_strcmp0 (key, "Percentage") == 0) {
device->priv->percentage = g_value_get_double (value);
} else if (g_strcmp0 (key, "Technology") == 0) {
@@ -723,10 +723,10 @@ dkp_device_set_property (GObject *object, guint prop_id, const GValue *value, GP
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);
@@ -824,10 +824,10 @@ dkp_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
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);
@@ -1066,16 +1066,16 @@ dkp_device_class_init (DkpDeviceClass *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));
/**
* DkpDevice: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));
/**
* DkpDevice:percentage:
diff --git a/libupower-glib/up-device.c b/libupower-glib/up-device.c
index 3aecfd3..bb6ee26 100644
--- a/libupower-glib/up-device.c
+++ b/libupower-glib/up-device.c
@@ -196,9 +196,9 @@ up_device_collect_props_cb (const char *key, const GValue *value, UpDevice *devi
} else if (g_strcmp0 (key, "Voltage") == 0) {
device->priv->voltage = g_value_get_double (value);
} else if (g_strcmp0 (key, "TimeToFull") == 0) {
- device->priv->time_to_full = g_value_get_int64 (value);
+ device->priv->time_to_full = g_value_get_uint64 (value);
} else if (g_strcmp0 (key, "TimeToEmpty") == 0) {
- device->priv->time_to_empty = g_value_get_int64 (value);
+ device->priv->time_to_empty = g_value_get_uint64 (value);
} else if (g_strcmp0 (key, "Percentage") == 0) {
device->priv->percentage = g_value_get_double (value);
} else if (g_strcmp0 (key, "Technology") == 0) {
@@ -791,10 +791,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);
@@ -892,10 +892,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);
@@ -1226,7 +1226,7 @@ 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,
+ g_param_spec_uint64 ("time-to-empty", NULL, NULL,
0, G_MAXINT64, 0,
G_PARAM_READWRITE));
/**
@@ -1238,7 +1238,7 @@ up_device_class_init (UpDeviceClass *klass)
**/
g_object_class_install_property (object_class,
PROP_TIME_TO_FULL,
- g_param_spec_int64 ("time-to-full", NULL, NULL,
+ g_param_spec_uint64 ("time-to-full", NULL, NULL,
0, G_MAXINT64, 0,
G_PARAM_READWRITE));
/**
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