libseat: Better error reporting from open_seat

This commit is contained in:
Kenny Levinsen 2020-10-11 20:30:24 +02:00
parent 7d785ea993
commit 29ba210958

View file

@ -40,22 +40,39 @@ struct libseat *libseat_open_seat(struct libseat_seat_listener *listener, void *
log_init(); log_init();
char *backend_type = getenv("LIBSEAT_BACKEND"); char *backend_type = getenv("LIBSEAT_BACKEND");
if (backend_type != NULL) {
const struct named_backend *iter = impls;
while (iter->backend != NULL && strcmp(backend_type, iter->name) != 0) {
iter++;
}
if (iter == NULL || iter->backend == NULL) {
log_errorf("No backend matched name '%s'", backend_type);
errno = EINVAL;
return NULL;
}
struct libseat *backend = iter->backend->open_seat(listener, data);
if (backend == NULL) {
log_errorf("Backend '%s' failed to open seat: %s", iter->name,
strerror(errno));
return NULL;
}
log_infof("Seat opened with backend '%s'", iter->name);
return backend;
}
struct libseat *backend = NULL; struct libseat *backend = NULL;
for (const struct named_backend *iter = impls; iter->backend != NULL; iter++) { for (const struct named_backend *iter = impls; iter->backend != NULL; iter++) {
if (backend_type != NULL && strcmp(backend_type, iter->name) != 0) {
continue;
}
log_infof("Trying backend '%s'", iter->name);
backend = iter->backend->open_seat(listener, data); backend = iter->backend->open_seat(listener, data);
if (backend != NULL) { if (backend != NULL) {
log_infof("Seat opened with backend '%s'", iter->name); log_infof("Seat opened with backend '%s'", iter->name);
break; return backend;
} }
log_infof("Backend '%s' failed to open seat, skipping", iter->name);
} }
if (backend == NULL) {
errno = ENOSYS; log_error("No backend was able to open a seat");
} errno = ENOSYS;
return backend; return NULL;
} }
int libseat_disable_seat(struct libseat *seat) { int libseat_disable_seat(struct libseat *seat) {