break;
}
+ free(device->name);
free(device);
return NULL;
log_debug("sysview: %s: TakeControl failed: %s: %s",
session->name, e->name, e->message);
- error = sd_bus_error_get_errno(e);
+ error = -sd_bus_error_get_errno(e);
} else {
session->has_control = true;
error = 0;
if (!seat->name)
return -ENOMEM;
- seat->session_map = hashmap_new(string_hash_func, string_compare_func);
+ seat->session_map = hashmap_new(&string_hash_ops);
if (!seat->session_map)
return -ENOMEM;
- seat->device_map = hashmap_new(string_hash_func, string_compare_func);
+ seat->device_map = hashmap_new(&string_hash_ops);
if (!seat->device_map)
return -ENOMEM;
return context_raise(c, &event, 0);
}
+static int context_raise_device_change(sysview_context *c, sysview_device *device, struct udev_device *ud) {
+ sysview_event event = {
+ .type = SYSVIEW_EVENT_DEVICE_CHANGE,
+ .device_change = {
+ .device = device,
+ .ud = ud,
+ }
+ };
+
+ return context_raise(c, &event, 0);
+}
+
static int context_add_device(sysview_context *c, sysview_device *device) {
sysview_session *session;
int r, error = 0;
return errno > 0 ? -errno : -EFAULT;
}
- c->seat_map = hashmap_new(string_hash_func, string_compare_func);
+ c->seat_map = hashmap_new(&string_hash_ops);
if (!c->seat_map)
return -ENOMEM;
- c->session_map = hashmap_new(string_hash_func, string_compare_func);
+ c->session_map = hashmap_new(&string_hash_ops);
if (!c->session_map)
return -ENOMEM;
- c->device_map = hashmap_new(string_hash_func, string_compare_func);
+ c->device_map = hashmap_new(&string_hash_ops);
if (!c->device_map)
return -ENOMEM;
return r;
}
- return r;
+ return 0;
}
static int context_ud_prepare_scan(sysview_context *c, struct udev_enumerate *e) {
if (!device)
return 0;
- /* TODO: send REFRESH event */
+ return context_raise_device_change(c, device, d);
} else if (!action || streq_ptr(action, "add")) {
struct udev_device *p;
unsigned int type, t;
if (streq(subsystem, "input") && startswith(sysname, "event") && safe_atou(sysname + 5, &t) >= 0)
type = SYSVIEW_DEVICE_EVDEV;
- else if (streq(subsystem, "drm") && startswith(sysname, "card") && safe_atou(sysname + 4, &t) >= 0)
+ else if (streq(subsystem, "drm") && startswith(sysname, "card"))
type = SYSVIEW_DEVICE_DRM;
else
type = (unsigned)-1;
p = d;
seatname = NULL;
- while ((p = udev_device_get_parent(p))) {
+ do {
seatname = udev_device_get_property_value(p, "ID_SEAT");
if (seatname)
break;
- }
+ } while ((p = udev_device_get_parent(p)));
seat = sysview_find_seat(c, seatname ? : "seat0");
if (!seat)
log_debug("sysview: ListSeats on logind failed: %s: %s",
error->name, error->message);
- return sd_bus_error_get_errno(error);
+ return -sd_bus_error_get_errno(error);
}
r = sd_bus_message_enter_container(reply, 'a', "(so)");
log_debug("sysview: ListSessions on logind failed: %s: %s",
error->name, error->message);
- return sd_bus_error_get_errno(error);
+ return -sd_bus_error_get_errno(error);
}
r = sd_bus_message_enter_container(reply, 'a', "(susso)");