From bb16f0d2450419730e7d96f27b157cd7b9e36642 Mon Sep 17 00:00:00 2001 From: Dave Andreoli Date: Fri, 23 Apr 2021 11:11:33 +0200 Subject: [PATCH] Better handling of dbus errors Now print the error instead of silently fail --- src/backend_systemd.c | 14 +++++++------- src/backend_udisks1.c | 9 +++++++-- src/backend_udisks2.c | 14 +++++++------- src/e_mod_main.h | 15 +++++++++++++++ 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/backend_systemd.c b/src/backend_systemd.c index 9d54354..42359ee 100644 --- a/src/backend_systemd.c +++ b/src/backend_systemd.c @@ -97,7 +97,7 @@ _places_sd_name_start(void *data, const Eldbus_Message *msg, Eldbus_Message *meth; Eldbus_Message_Iter *iter, *array; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); printf("PLACES: systemd Up and running\n"); @@ -138,7 +138,7 @@ _places_sd_list_units_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending * unsigned int job_id; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN( eldbus_message_arguments_get(msg, "a(ssssssouso)", &units) @@ -178,7 +178,7 @@ _places_sd_unit_new_cb(void *data, const Eldbus_Message *msg) { const char *id, *obj_path; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "so", &id, &obj_path)); // printf("PLACES: UnitNew(%s, %s)\n", id, obj_path); @@ -201,7 +201,7 @@ _places_sd_unit_removed_cb(void *data, const Eldbus_Message *msg) { const char *id, *obj_path; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "so", &id, &obj_path)); // printf("PLACES: UnitRemoved(%s, %s)\n", id, obj_path); @@ -277,7 +277,7 @@ _places_sd_mount_props_all_cb(void *data, const Eldbus_Message *msg, Eldbus_Pend Eldbus_Message_Iter *props; EINA_SAFETY_ON_NULL_RETURN(vol); - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (eldbus_message_arguments_get(msg, "a{sv}", &props)) { @@ -295,7 +295,7 @@ _places_sd_unit_props_all_cb(void *data, const Eldbus_Message *msg, Eldbus_Pendi Eldbus_Message_Iter *props; EINA_SAFETY_ON_NULL_RETURN(vol); - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (eldbus_message_arguments_get(msg, "a{sv}", &props)) { @@ -314,7 +314,7 @@ _places_sd_mount_props_changed_cb(void *data, const Eldbus_Message *msg) const char *iface; EINA_SAFETY_ON_NULL_RETURN(vol); - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (eldbus_message_arguments_get(msg, "sa{sv}as", &iface, &changed_props, &invalidated_props)) diff --git a/src/backend_udisks1.c b/src/backend_udisks1.c index efea547..7ba73f3 100644 --- a/src/backend_udisks1.c +++ b/src/backend_udisks1.c @@ -65,6 +65,7 @@ places_udisks1_shutdown(void) eldbus_shutdown(); } + /* Implementation */ static void _places_udisks_name_start(void *data, const Eldbus_Message *msg, @@ -73,6 +74,7 @@ _places_udisks_name_start(void *data, const Eldbus_Message *msg, Eldbus_Object *obj; unsigned flag; + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "u", &flag)); obj = eldbus_object_get(_places_dbus_conn, UDISKS_BUS, UDISKS_PATH); @@ -123,7 +125,7 @@ _places_udisks_enumerate_devices_cb(void *data, const Eldbus_Message *msg, Eldbu Eldbus_Message_Iter *ao; const char *devpath; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "ao", &ao)); while (eldbus_message_iter_get_and_next(ao, 'o', &devpath)) @@ -143,6 +145,7 @@ _places_udisks_device_add_cb(void *data, const Eldbus_Message *msg) Volume *vol; char *devpath; + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "o", &devpath)); printf("PLACES udisks: DeviceAdded [%s]\n", devpath); @@ -158,6 +161,7 @@ _places_udisks_device_del_cb(void *data, const Eldbus_Message *msg) Volume *vol; char *devpath; + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "o", &devpath)); if ((vol = places_volume_by_id_get(devpath))) @@ -171,6 +175,7 @@ _places_udisks_device_changed_cb(void *data, const Eldbus_Message *msg) Volume *vol = data; if (!vol) return; + PLACES_ON_MSG_ERROR_RETURN(msg); eldbus_proxy_property_get_all((Eldbus_Proxy *)vol->backend_data, _places_udisks_vol_props_cb, vol); } @@ -202,7 +207,7 @@ _places_udisks_vol_props_cb(void *data, const Eldbus_Message *msg, Eldbus_Pendin Eina_Bool media_available = EINA_FALSE; unsigned long long size = 0; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "a{sv}", &array)); // collect usefull props iterating over the dict diff --git a/src/backend_udisks2.c b/src/backend_udisks2.c index 603049f..70303a0 100644 --- a/src/backend_udisks2.c +++ b/src/backend_udisks2.c @@ -180,7 +180,7 @@ _places_ud2_name_start(void *data, const Eldbus_Message *msg, { Eldbus_Proxy *proxy; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); // get the UDisks2 ObjectManager object _places_ud2_object_manager = eldbus_object_get(_places_ud2_conn, @@ -210,7 +210,7 @@ _places_ud2_get_managed_objects_cb(void *data, const Eldbus_Message *msg, Eldbus Eldbus_Message_Iter *ifaces_array; const char *obj_path; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); printf("PLACES: GetManagedObjects\n"); if (!eldbus_message_arguments_get(msg, "a{oa{sa{sv}}}", &objs_array)) @@ -236,7 +236,7 @@ _places_ud2_interfaces_added_cb(void *data, const Eldbus_Message *msg) const char *obj_path; Eldbus_Message_Iter *ifaces_array; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (eldbus_message_arguments_get(msg, "oa{sa{sv}}", &obj_path, &ifaces_array)) { @@ -256,7 +256,7 @@ _places_ud2_interfaces_removed_cb(void *data, const Eldbus_Message *msg) Eldbus_Message_Iter *array_ifaces; Volume *vol; - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (!eldbus_message_arguments_get(msg, "oas", &obj_path, &array_ifaces)) return; @@ -281,7 +281,7 @@ _places_ud2_block_props_changed_cb(void *data, const Eldbus_Message *msg) char *mount_point = NULL; EINA_SAFETY_ON_NULL_RETURN(vol); - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (!eldbus_message_arguments_get(msg, "sa{sv}as", &iface_name, &changed_props, &invalidated_props)) @@ -322,7 +322,7 @@ _places_ud2_drive_props_changed_cb(void *data, const Eldbus_Message *msg) const char *iface_name; EINA_SAFETY_ON_NULL_RETURN(vol); - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); if (!eldbus_message_arguments_get(msg, "sa{sv}as", &iface_name, &changed_props, &invalidated_props)) @@ -466,7 +466,7 @@ _places_ud2_drive_props_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending Eldbus_Message_Iter *props_array; EINA_SAFETY_ON_NULL_RETURN(vol); - EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL)); + PLACES_ON_MSG_ERROR_RETURN(msg); EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_arguments_get(msg, "a{sv}", &props_array)); printf("PLACES: Drive properties for: %s\n", vol->id); _places_ud2_read_drive_properies(vol, props_array); diff --git a/src/e_mod_main.h b/src/e_mod_main.h index fabe600..5ff68d1 100644 --- a/src/e_mod_main.h +++ b/src/e_mod_main.h @@ -11,6 +11,21 @@ #endif #define N_(string) (string) + +/* Check for dbus messages error */ +#define PLACES_ON_MSG_ERROR_RETURN(msg) \ + do \ + { \ + const char *err; \ + if (eldbus_message_error_get(msg, NULL, &err)) \ + { \ + EINA_SAFETY_ERROR(err); \ + return; \ + } \ + } \ + while (0) + + /* Macros used for config file versioning */ #define MOD_CONFIG_FILE_EPOCH 0x0001 #define MOD_CONFIG_FILE_GENERATION 0x0090