diff options
author | Holger Macht <holger@homac.de> | 2006-11-17 16:47:22 +0100 |
---|---|---|
committer | Holger Macht <holger@homac.de> | 2006-11-17 16:47:22 +0100 |
commit | b876db8c69bd630c1fd407c5b72acc93fc49d175 (patch) | |
tree | 1c6490ab17944784f96d5ef7146e37e746cda08f | |
parent | 8fd5afef62b2105303170eca17bd1c13a9398085 (diff) |
add testing code and more error handling
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | liblazy/liblazy_dbus.c | 12 | ||||
-rw-r--r-- | liblazy/liblazy_hal.c | 73 | ||||
-rw-r--r-- | liblazy/liblazy_polkit.c | 3 | ||||
-rw-r--r-- | tools/test.c | 119 |
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; } |