summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolger Macht <holger@homac.de>2006-11-17 16:47:22 +0100
committerHolger Macht <holger@homac.de>2006-11-17 16:47:22 +0100
commitb876db8c69bd630c1fd407c5b72acc93fc49d175 (patch)
tree1c6490ab17944784f96d5ef7146e37e746cda08f
parent8fd5afef62b2105303170eca17bd1c13a9398085 (diff)
add testing code and more error handling
-rw-r--r--configure.in2
-rw-r--r--liblazy/liblazy_dbus.c12
-rw-r--r--liblazy/liblazy_hal.c73
-rw-r--r--liblazy/liblazy_polkit.c3
-rw-r--r--tools/test.c119
5 files changed, 181 insertions, 28 deletions
diff --git a/configure.in b/configure.in
index abe1c99..70d623b 100644
--- a/configure.in
+++ b/configure.in
@@ -3,7 +3,7 @@
AC_PREREQ(2.59)
-AC_INIT(liblazy, HEAD, hmacht@suse.de)
+AC_INIT(liblazy, 0.1.1, hmacht@suse.de)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([liblazy/liblazy_hal.c])
diff --git a/liblazy/liblazy_dbus.c b/liblazy/liblazy_dbus.c
index 2a1d919..2963055 100644
--- a/liblazy/liblazy_dbus.c
+++ b/liblazy/liblazy_dbus.c
@@ -42,6 +42,9 @@ int liblazy_dbus_send_method_call(const char *destination, const char *path,
DBusMessage *message = NULL;
int ret = 0;
+ if (path == NULL || method == NULL)
+ return LIBLAZY_ERROR_INVALID_ARGUMENT;
+
dbus_error_init(&dbus_error);
dbus_connection = dbus_bus_get(bus_type, &dbus_error);
@@ -127,6 +130,9 @@ static int liblazy_dbus_send_signal(const char *path, const char *interface,
DBusConnection *dbus_connection;
int ret = 0;
+ if (path == NULL || interface == NULL || name == NULL)
+ return LIBLAZY_ERROR_INVALID_ARGUMENT;
+
dbus_error_init(&dbus_error);
dbus_connection = dbus_bus_get(bus_type, &dbus_error);
@@ -187,10 +193,8 @@ int liblazy_dbus_message_get_basic_arg(DBusMessage *message, int type,
int ret = LIBLAZY_ERROR_GENERAL;
int _no = 0;
- if (message == NULL) {
- ERROR("Passing in NULL for message argument invalid");
- return ret;
- }
+ if (message == NULL)
+ return LIBLAZY_ERROR_INVALID_ARGUMENT;
for (dbus_message_iter_init(message, &iter);
(current_type = dbus_message_iter_get_arg_type(&iter)) != DBUS_TYPE_INVALID;
diff --git a/liblazy/liblazy_hal.c b/liblazy/liblazy_hal.c
index 3837d6e..4b7dd43 100644
--- a/liblazy/liblazy_hal.c
+++ b/liblazy/liblazy_hal.c
@@ -60,7 +60,8 @@ static int liblazy_hal_property_exists(char *udi, char *property)
error = liblazy_dbus_message_get_basic_arg(reply, DBUS_TYPE_BOOLEAN,
&exists, 0);
- dbus_message_unref(reply);
+ if (reply != NULL)
+ dbus_message_unref(reply);
if (exists == 1)
return 1;
return error;
@@ -84,9 +85,14 @@ static int liblazy_hal_get_property(char *udi, char *property, char *method,
&property,
DBUS_TYPE_INVALID);
+ if (error) {
+ ERROR("Error sending '%s' to HAL", method);
+ return error;
+ }
error = liblazy_dbus_message_get_basic_arg(reply, type, value, 0);
- dbus_message_unref(reply);
+ if (reply != NULL)
+ dbus_message_unref(reply);
if (error)
ERROR("Error fetching property '%s'", property);
return error;
@@ -117,32 +123,45 @@ static int liblazy_hal_get_strlist_manager(char ***strlist, char *method,
}
error = liblazy_dbus_message_get_strlist_arg(reply, strlist, 0);
- dbus_message_unref(reply);
+ if (reply != NULL)
+ dbus_message_unref(reply);
return error;
}
int liblazy_hal_get_property_string(char *udi, char *property, char **value)
{
char *str;
- int error;
+ int ret;
- if (liblazy_hal_property_exists(udi, property) != 1) {
- *value = NULL;
- return LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
+ ret = liblazy_hal_property_exists(udi, property);
+ if (ret != 1) {
+ if (ret == 0)
+ ret = LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
+ goto Error;
}
- error = liblazy_hal_get_property(udi, property, "GetPropertyString",
- DBUS_TYPE_STRING, &str);
-
+ ret = liblazy_hal_get_property(udi, property, "GetPropertyString",
+ DBUS_TYPE_STRING, &str);
+ if (ret)
+ goto Error;
+
*value = strdup(str);
- return error;
+ return ret;
+Error:
+ *value = NULL;
+ return ret;
}
int liblazy_hal_get_property_int(char *udi, char *property, int *value)
{
- if (!liblazy_hal_property_exists(udi, property)) {
+ int ret;
+
+ ret = liblazy_hal_property_exists(udi, property);
+ if (ret != 1) {
+ if (ret == 0)
+ ret = LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
*value = -1;
- return LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
+ return ret;
}
return liblazy_hal_get_property(udi, property, "GetPropertyInteger",
@@ -151,9 +170,14 @@ int liblazy_hal_get_property_int(char *udi, char *property, int *value)
int liblazy_hal_get_property_bool(char *udi, char *property, int *value)
{
- if (!liblazy_hal_property_exists(udi, property)) {
+ int ret;
+
+ ret = liblazy_hal_property_exists(udi, property);
+ if (ret != 1) {
+ if (ret == 0)
+ ret = LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
*value = -1;
- return LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
+ return ret;
}
return liblazy_hal_get_property(udi, property, "GetPropertyBoolean",
@@ -169,9 +193,10 @@ int liblazy_hal_get_property_strlist(char *udi, char *property, char ***strlist)
return LIBLAZY_ERROR_INVALID_ARGUMENT;
error = liblazy_hal_property_exists(udi, property);
- if (!error) {
- strlist[0] = NULL;
- return error;
+ if (error != 1) {
+ if (error == 0)
+ error = LIBLAZY_ERROR_HAL_NO_SUCH_PROPERTY;
+ goto Error;
}
error = liblazy_dbus_system_send_method_call(DBUS_HAL_SERVICE,
@@ -185,12 +210,18 @@ int liblazy_hal_get_property_strlist(char *udi, char *property, char ***strlist)
if (error) {
ERROR("Error while getting strlist property %s from HAL", property);
- return error;
+ goto Error;
}
error = liblazy_dbus_message_get_strlist_arg(reply, strlist, 0);
- dbus_message_unref(reply);
-
+ if (reply != NULL)
+ dbus_message_unref(reply);
+ if (error)
+ goto Error;
+ return error;
+
+Error:
+ strlist[0] = NULL;
return error;
}
diff --git a/liblazy/liblazy_polkit.c b/liblazy/liblazy_polkit.c
index 452f20e..e880822 100644
--- a/liblazy/liblazy_polkit.c
+++ b/liblazy/liblazy_polkit.c
@@ -82,7 +82,8 @@ int liblazy_polkit_is_user_allowed_by_name(char *user,
error = liblazy_dbus_message_get_basic_arg(reply, DBUS_TYPE_BOOLEAN,
&is_allowed, 0);
- dbus_message_unref(reply);
+ if (reply != NULL)
+ dbus_message_unref(reply);
if (error)
return error;
return is_allowed;
diff --git a/tools/test.c b/tools/test.c
index 13fff76..47b6f15 100644
--- a/tools/test.c
+++ b/tools/test.c
@@ -1,9 +1,126 @@
#include "liblazy.h"
#include <stdio.h>
+#include <unistd.h>
+
+#define DBUS_NM_SERVICE "org.freedesktop.NetworkManager"
+#define DBUS_NM_INTERFACE "org.freedesktop.NetworkManager"
+#define DBUS_NM_PATH "/org/freedesktop/NetworkManager"
+#define DBUS_HAL_MANAGER_INTERFACE "org.freedesktop.Hal.Manager"
+#define DBUS_HAL_DEVICE_INTERFACE "org.freedesktop.Hal.Device"
+#define DBUS_HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer"
+#define DBUS_HAL_INTERFACE "org.freedesktop.Hal"
+#define DBUS_HAL_CPUFREQ_INTERFACE "org.freedesktop.Hal.Device.CPUFreq"
+#define DBUS_SYSTEM_PM_INTERFACE "org.freedesktop.Policy.Power"
int main(int argc, char *argv[])
{
- /* add some testing code here */
+ char *governor = "ondemand";
+ char *rpstring = NULL;
+ int intval = -1;
+
+ int ret = 0;
+ DBusMessage *reply = NULL;
+
+ printf("Try to set the ondemand governor\n");
+ ret = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE,
+ DBUS_HAL_UDI_COMPUTER,
+ DBUS_HAL_CPUFREQ_INTERFACE,
+ "SetCPUFreqGovernor",
+ &reply,
+ DBUS_TYPE_STRING,
+ &governor,
+ DBUS_TYPE_INVALID);
+ printf("return value: %d\n", ret);
+ if (!ret)
+ dbus_message_unref(reply);
+
+ printf("------------------\n");
+ printf("Try to get the current governor\n");
+ ret = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE,
+ DBUS_HAL_UDI_COMPUTER,
+ DBUS_HAL_CPUFREQ_INTERFACE,
+ "GetCPUFreqGovernor",
+ &reply,
+ DBUS_TYPE_INVALID);
+
+ ret = liblazy_dbus_message_get_basic_arg(reply, DBUS_TYPE_STRING, &rpstring, 0);
+ printf("returned string: %s\n", rpstring);
+ printf("return value: %d\n", ret);
+ if (!ret)
+ dbus_message_unref(reply);
+
+ printf("--------------------\n");
+ ret = liblazy_hal_get_property_string("/org/freedesktop/Hal/devices/computer",
+ "system.kernel.name",
+ &rpstring);
+ printf("return value: %d\n", ret);
+ printf("returned string: %s\n", rpstring);
+
+ printf("string: %s\n", rpstring);
+ liblazy_free_string(rpstring);
+
+ printf("--------------------\n");
+ printf("Try to get a string property from HAL\n");
+ ret = liblazy_hal_get_property_string("/org/freedesktop/Hal/devices/computer",
+ "system.kernel.name",
+ &rpstring);
+ printf("return value: %d\n", ret);
+ printf("returned string: %s\n", rpstring);
+ liblazy_free_string(rpstring);
+
+ printf("--------------------\n");
+ printf("Try to get a boolean value from HAL\n");
+ ret = liblazy_hal_get_property_bool("/org/freedesktop/Hal/devices/computer",
+ "power_management.can_hibernate",
+ &intval);
+ printf("return value: %d\n", ret);
+ printf("returned int: %d\n", intval);
+
+ printf("--------------------\n");
+ printf("Try to get a integer value from HAL\n");
+ ret = liblazy_hal_get_property_int("/org/freedesktop/Hal/devices/acpi_BAT0",
+ "battery.charge_level.current",
+ &intval);
+ printf("return value: %d\n", ret);
+ printf("returned int: %d\n", intval);
+
+
+ printf("--------------------\n");
+ ret = liblazy_hal_get_property_string("/org/freedesktop/Hal/devices/computer",
+ "system.kernel.name",
+ &rpstring);
+ printf("return value: %d\n", ret);
+ printf("returned string: %s\n", rpstring);
+
+ printf("string: %s\n", rpstring);
+ liblazy_free_string(rpstring);
+
+ printf("--------------------\n");
+ printf("Try to get a string property from HAL\n");
+ ret = liblazy_hal_get_property_string("/org/freedesktop/Hal/devices/computer",
+ "system.kernel.name",
+ &rpstring);
+ printf("return value: %d\n", ret);
+ printf("returned string: %s\n", rpstring);
+ liblazy_free_string(rpstring);
+
+ printf("--------------------\n");
+ printf("Try to get a boolean value from HAL\n");
+ ret = liblazy_hal_get_property_bool("/org/freedesktop/Hal/devices/computer",
+ "power_management.can_hibernate",
+ &intval);
+ printf("return value: %d\n", ret);
+ printf("returned int: %d\n", intval);
+
+ printf("--------------------\n");
+ printf("Trying to send signal over system bus\n");
+ ret = liblazy_dbus_system_send_signal("/macht/holger/super",
+ "org.holger.super",
+ "heyho",
+ DBUS_TYPE_INVALID);
+ printf("return value: %d\n", ret);
+
+
return 0;
}