Merge pull request #30710 from YHNdnzj/logind-ret-gather

logind-session: modernization
This commit is contained in:
Yu Watanabe
2024-01-04 05:25:41 +09:00
committed by GitHub
3 changed files with 17 additions and 20 deletions
+11 -8
View File
@@ -321,24 +321,25 @@ static int session_device_verify(SessionDevice *sd) {
return 0;
}
int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **out) {
int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **ret) {
SessionDevice *sd;
int r;
assert(s);
assert(out);
if (!s->seat)
return -EPERM;
sd = new0(SessionDevice, 1);
sd = new(SessionDevice, 1);
if (!sd)
return -ENOMEM;
sd->session = s;
sd->dev = dev;
sd->fd = -EBADF;
sd->type = DEVICE_TYPE_UNKNOWN;
*sd = (SessionDevice) {
.session = s,
.dev = dev,
.fd = -EBADF,
.type = DEVICE_TYPE_UNKNOWN,
};
r = session_device_verify(sd);
if (r < 0)
@@ -369,7 +370,9 @@ int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **
LIST_PREPEND(sd_by_device, sd->device->session_devices, sd);
*out = sd;
if (ret)
*ret = sd;
return 0;
error:
+1 -1
View File
@@ -27,7 +27,7 @@ struct SessionDevice {
LIST_FIELDS(struct SessionDevice, sd_by_device);
};
int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **out);
int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **ret);
SessionDevice *session_device_free(SessionDevice *sd);
DEFINE_TRIVIAL_CLEANUP_FUNC(SessionDevice*, session_device_free);
+5 -11
View File
@@ -377,33 +377,27 @@ static int session_load_devices(Session *s, const char *devices) {
for (const char *p = devices;;) {
_cleanup_free_ char *word = NULL;
SessionDevice *sd;
dev_t dev;
int k;
k = extract_first_word(&p, &word, NULL, 0);
if (k == 0)
break;
if (k < 0) {
r = k;
if (k <= 0) {
RET_GATHER(r, k);
break;
}
k = parse_devnum(word, &dev);
if (k < 0) {
r = k;
RET_GATHER(r, k);
continue;
}
/* The file descriptors for loaded devices will be reattached later. */
k = session_device_new(s, dev, false, &sd);
if (k < 0)
r = k;
RET_GATHER(r, session_device_new(s, dev, /* open_device = */ false, /* ret = */ NULL));
}
if (r < 0)
log_error_errno(r, "Loading session devices for session %s failed: %m", s->id);
log_error_errno(r, "Failed to load some session devices for session '%s': %m", s->id);
return r;
}