Skipping interfaces randomly without the caller specifying it is nasty.
Avoid this and let the caller do that themselves.
kc->slot_locale_get_all = sd_bus_slot_unref(kc->slot_locale_get_all);
kc->slot_locale_get_all = sd_bus_slot_unref(kc->slot_locale_get_all);
+ /* skip interface name */
+ r = sd_bus_message_skip(signal, "s");
+ if (r < 0)
+ goto error;
+
r = bus_message_map_properties_changed(bus, signal, kbdctx_locale_map, kc);
r = bus_message_map_properties_changed(bus, signal, kbdctx_locale_map, kc);
- if (r < 0) {
- log_debug("idev-keyboard: cannot handle PropertiesChanged from locale1: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ goto error;
if (r > 0) {
r = kbdctx_query_locale(kc);
if (r > 0) {
r = kbdctx_query_locale(kc);
kbdctx_refresh_keymap(kc);
return 0;
kbdctx_refresh_keymap(kc);
return 0;
+
+error:
+ log_debug("idev-keyboard: cannot handle PropertiesChanged from locale1: %s", strerror(-r));
+ return r;
}
static int kbdctx_setup_bus(kbdctx *kc) {
}
static int kbdctx_setup_bus(kbdctx *kc) {
- /* skip interface, but allow callers to do that themselves */
- sd_bus_message_skip(m, "s");
-
r = bus_message_map_all_properties(bus, m, map, userdata);
if (r < 0)
return r;
r = bus_message_map_all_properties(bus, m, map, userdata);
if (r < 0)
return r;