From 8ccba83fd80b139de81ae6107b0c7115458a5354 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 3 Jan 2024 23:15:14 +0800 Subject: [PATCH 1/2] logind-session-device: trivial modernizations --- src/login/logind-session-device.c | 19 +++++++++++-------- src/login/logind-session-device.h | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/login/logind-session-device.c b/src/login/logind-session-device.c index c1bc88d038..cd5c0ec82d 100644 --- a/src/login/logind-session-device.c +++ b/src/login/logind-session-device.c @@ -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: diff --git a/src/login/logind-session-device.h b/src/login/logind-session-device.h index 04654d1252..06a8f80c06 100644 --- a/src/login/logind-session-device.h +++ b/src/login/logind-session-device.h @@ -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); From 41935c0c3aba670d0ff7ac91a81ecff7ab7c4ae9 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 3 Jan 2024 23:18:46 +0800 Subject: [PATCH 2/2] logind-session: use RET_GATHER more --- src/login/logind-session.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 3f5decd8d9..03e5d68bdf 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -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; }