From 214c93c84c8745f0b5c91e1a858a178c41865dc5 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Fri, 18 Apr 2025 23:53:19 +0200 Subject: [PATCH] login: Remove circular header dependencies --- src/login/logind-action.c | 1 + src/login/logind-action.h | 6 ++---- src/login/logind-brightness.h | 2 +- src/login/logind-button.c | 1 + src/login/logind-button.h | 10 ++++++---- src/login/logind-core.c | 5 +++++ src/login/logind-dbus.c | 3 +++ src/login/logind-dbus.h | 9 ++++++--- src/login/logind-device.c | 3 +++ src/login/logind-device.h | 10 ++++++---- src/login/logind-gperf.gperf | 1 + src/login/logind-inhibit.c | 1 + src/login/logind-inhibit.h | 6 ++++-- src/login/logind-polkit.c | 1 + src/login/logind-polkit.h | 3 ++- src/login/logind-seat-dbus.c | 1 + src/login/logind-seat-dbus.h | 4 +++- src/login/logind-seat.c | 5 +++++ src/login/logind-seat.h | 11 ++++++++--- src/login/logind-session-dbus.c | 2 ++ src/login/logind-session-dbus.h | 5 ++++- src/login/logind-session-device.c | 4 ++++ src/login/logind-session-device.h | 13 +++++++------ src/login/logind-session.c | 5 +++++ src/login/logind-session.h | 18 ++++++++++++------ src/login/logind-user-dbus.h | 5 ++++- src/login/logind-user.c | 2 ++ src/login/logind-user.h | 7 +++++-- src/login/logind-utmp.c | 3 +++ src/login/logind-utmp.h | 2 +- src/login/logind-varlink.c | 2 ++ src/login/logind-varlink.h | 4 ++-- src/login/logind.c | 5 +++++ src/login/logind.h | 16 ++++++++-------- src/login/test-login-tables.c | 1 + 35 files changed, 127 insertions(+), 50 deletions(-) diff --git a/src/login/logind-action.c b/src/login/logind-action.c index c663d2493d..9d1e392d7b 100644 --- a/src/login/logind-action.c +++ b/src/login/logind-action.c @@ -11,6 +11,7 @@ #include "bus-util.h" #include "conf-parser.h" #include "format-util.h" +#include "logind.h" #include "logind-action.h" #include "logind-dbus.h" #include "logind-seat-dbus.h" diff --git a/src/login/logind-action.h b/src/login/logind-action.h index 800f4e8309..e251701a8d 100644 --- a/src/login/logind-action.h +++ b/src/login/logind-action.h @@ -2,6 +2,8 @@ #pragma once #include "conf-parser.h" +#include "logind-inhibit.h" +#include "sleep-config.h" typedef enum HandleAction { HANDLE_IGNORE, @@ -41,10 +43,6 @@ typedef enum HandleActionSleepMask { #define HANDLE_ACTION_SLEEP_MASK_DEFAULT (HANDLE_SLEEP_SUSPEND_THEN_HIBERNATE_MASK|HANDLE_SLEEP_SUSPEND_MASK|HANDLE_SLEEP_HIBERNATE_MASK) -#include "logind-inhibit.h" -#include "logind.h" -#include "sleep-config.h" - static inline bool handle_action_valid(HandleAction a) { return a >= 0 && a < _HANDLE_ACTION_MAX; } diff --git a/src/login/logind-brightness.h b/src/login/logind-brightness.h index f1c77757a8..d0e8580032 100644 --- a/src/login/logind-brightness.h +++ b/src/login/logind-brightness.h @@ -4,6 +4,6 @@ #include "sd-bus.h" #include "sd-device.h" -#include "logind.h" +typedef struct Manager Manager; int manager_write_brightness(Manager *m, sd_device *device, uint32_t brightness, sd_bus_message *message); diff --git a/src/login/logind-button.c b/src/login/logind-button.c index 2b6b1dc463..4d4853b570 100644 --- a/src/login/logind-button.c +++ b/src/login/logind-button.c @@ -11,6 +11,7 @@ #include "alloc-util.h" #include "async.h" #include "fd-util.h" +#include "logind.h" #include "logind-button.h" #include "logind-dbus.h" #include "string-util.h" diff --git a/src/login/logind-button.h b/src/login/logind-button.h index 125e49dd08..4af54cb33d 100644 --- a/src/login/logind-button.h +++ b/src/login/logind-button.h @@ -1,9 +1,11 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Button Button; +#include -#include "logind.h" +#include "sd-event.h" + +typedef struct Manager Manager; typedef enum ButtonModifierMask { BUTTON_MODIFIER_NONE = 0, @@ -19,7 +21,7 @@ typedef enum ButtonModifierMask { #define BUTTON_MODIFIER_HAS_CTRL(modifier) (((modifier) & (BUTTON_MODIFIER_LEFT_CTRL|BUTTON_MODIFIER_RIGHT_CTRL)) != 0) #define BUTTON_MODIFIER_HAS_ALT(modifier) (((modifier) & (BUTTON_MODIFIER_LEFT_ALT|BUTTON_MODIFIER_RIGHT_ALT)) != 0) -struct Button { +typedef struct Button { Manager *manager; sd_event_source *io_event_source; @@ -33,7 +35,7 @@ struct Button { bool lid_closed; bool docked; -}; +} Button; Button* button_new(Manager *m, const char *name); Button *button_free(Button *b); diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 1619276520..80e777b505 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -20,6 +20,11 @@ #include "fd-util.h" #include "limits-util.h" #include "logind.h" +#include "logind-button.h" +#include "logind-device.h" +#include "logind-seat.h" +#include "logind-session.h" +#include "logind-user.h" #include "logind-utmp.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 37eb842e20..c6eac67c0a 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -32,12 +32,15 @@ #include "fileio.h" #include "format-util.h" #include "fs-util.h" +#include "login-util.h" #include "logind.h" #include "logind-action.h" #include "logind-dbus.h" #include "logind-polkit.h" +#include "logind-seat.h" #include "logind-seat-dbus.h" #include "logind-session-dbus.h" +#include "logind-user.h" #include "logind-user-dbus.h" #include "logind-utmp.h" #include "mkdir-label.h" diff --git a/src/login/logind-dbus.h b/src/login/logind-dbus.h index afbf523ede..0cf39c4ae5 100644 --- a/src/login/logind-dbus.h +++ b/src/login/logind-dbus.h @@ -4,10 +4,13 @@ #include "sd-bus.h" #include "bus-object.h" -#include "logind-action.h" #include "logind-session.h" -#include "logind-user.h" -#include "logind.h" +#include "macro.h" + +typedef struct Manager Manager; +typedef struct User User; +typedef struct Seat Seat; +typedef struct HandleActionData HandleActionData; int manager_get_session_from_creds(Manager *m, sd_bus_message *message, const char *name, sd_bus_error *error, Session **ret); int manager_get_user_from_creds(Manager *m, sd_bus_message *message, uid_t uid, sd_bus_error *error, User **ret); diff --git a/src/login/logind-device.c b/src/login/logind-device.c index 376cd0d42f..5f6b58b840 100644 --- a/src/login/logind-device.c +++ b/src/login/logind-device.c @@ -3,8 +3,11 @@ #include #include "alloc-util.h" +#include "logind.h" #include "logind-device.h" +#include "logind-seat.h" #include "logind-seat-dbus.h" +#include "logind-session-device.h" Device* device_new(Manager *m, const char *sysfs, bool master) { Device *d; diff --git a/src/login/logind-device.h b/src/login/logind-device.h index f96c4dbfb6..e6afe378a2 100644 --- a/src/login/logind-device.h +++ b/src/login/logind-device.h @@ -1,11 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Device Device; - #include "list.h" -#include "logind-seat.h" -#include "logind-session-device.h" +#include "time-util.h" + +typedef struct Device Device; +typedef struct Manager Manager; +typedef struct Seat Seat; +typedef struct SessionDevice SessionDevice; struct Device { Manager *manager; diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf index f09387e6a8..bd64b8352e 100644 --- a/src/login/logind-gperf.gperf +++ b/src/login/logind-gperf.gperf @@ -7,6 +7,7 @@ _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") #include #include "conf-parser.h" #include "logind.h" +#include "logind-user.h" %} struct ConfigPerfItem; %null_strings diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c index c0ae173783..86bae8f0b7 100644 --- a/src/login/logind-inhibit.c +++ b/src/login/logind-inhibit.c @@ -17,6 +17,7 @@ #include "format-util.h" #include "fs-util.h" #include "io-util.h" +#include "logind.h" #include "logind-dbus.h" #include "logind-inhibit.h" #include "mkdir-label.h" diff --git a/src/login/logind-inhibit.h b/src/login/logind-inhibit.h index ae91e2d402..1f115410f1 100644 --- a/src/login/logind-inhibit.h +++ b/src/login/logind-inhibit.h @@ -1,9 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include "sd-event.h" + #include "pidref.h" +#include "time-util.h" typedef struct Inhibitor Inhibitor; +typedef struct Manager Manager; typedef enum InhibitWhat { INHIBIT_SHUTDOWN = 1 << 0, @@ -26,8 +30,6 @@ typedef enum InhibitMode { _INHIBIT_MODE_INVALID = -EINVAL, } InhibitMode; -#include "logind.h" - struct Inhibitor { Manager *manager; diff --git a/src/login/logind-polkit.c b/src/login/logind-polkit.c index 5b6c256a08..1aa76e225d 100644 --- a/src/login/logind-polkit.c +++ b/src/login/logind-polkit.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "bus-polkit.h" +#include "logind.h" #include "logind-polkit.h" #include "user-util.h" diff --git a/src/login/logind-polkit.h b/src/login/logind-polkit.h index 9ec01a3c45..7619ce2d90 100644 --- a/src/login/logind-polkit.h +++ b/src/login/logind-polkit.h @@ -4,6 +4,7 @@ #include "sd-bus.h" #include "bus-object.h" -#include "logind.h" + +typedef struct Manager Manager; int check_polkit_chvt(sd_bus_message *message, Manager *manager, sd_bus_error *error); diff --git a/src/login/logind-seat-dbus.c b/src/login/logind-seat-dbus.c index 18acbf25b4..3c027e8fe1 100644 --- a/src/login/logind-seat-dbus.c +++ b/src/login/logind-seat-dbus.c @@ -13,6 +13,7 @@ #include "logind-seat-dbus.h" #include "logind-seat.h" #include "logind-session-dbus.h" +#include "logind-user.h" #include "logind.h" #include "strv.h" #include "user-util.h" diff --git a/src/login/logind-seat-dbus.h b/src/login/logind-seat-dbus.h index f4bd78e24b..782ee01c60 100644 --- a/src/login/logind-seat-dbus.h +++ b/src/login/logind-seat-dbus.h @@ -4,7 +4,9 @@ #include "sd-bus.h" #include "bus-object.h" -#include "logind-seat.h" +#include "macro.h" + +typedef struct Seat Seat; extern const BusObjectImplementation seat_object; diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index 50c2b21b47..06f32ecec5 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -14,9 +14,14 @@ #include "fileio.h" #include "format-util.h" #include "fs-util.h" +#include "logind.h" +#include "logind-device.h" #include "logind-seat-dbus.h" #include "logind-seat.h" +#include "logind-session.h" #include "logind-session-dbus.h" +#include "logind-session-device.h" +#include "logind-user.h" #include "mkdir-label.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/login/logind-seat.h b/src/login/logind-seat.h index 76a69e6517..4c4a6fa6bd 100644 --- a/src/login/logind-seat.h +++ b/src/login/logind-seat.h @@ -1,10 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Seat Seat; - #include "list.h" -#include "logind-session.h" +#include "memory-util.h" +#include "string-util.h" +#include "time-util.h" + +typedef struct Device Device; +typedef struct Manager Manager; +typedef struct Seat Seat; +typedef struct Session Session; struct Seat { Manager *manager; diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c index dbbadfedf7..af5e04bce4 100644 --- a/src/login/logind-session-dbus.c +++ b/src/login/logind-session-dbus.c @@ -15,10 +15,12 @@ #include "logind-brightness.h" #include "logind-dbus.h" #include "logind-polkit.h" +#include "logind-seat.h" #include "logind-seat-dbus.h" #include "logind-session-dbus.h" #include "logind-session-device.h" #include "logind-session.h" +#include "logind-user.h" #include "logind-user-dbus.h" #include "logind.h" #include "path-util.h" diff --git a/src/login/logind-session-dbus.h b/src/login/logind-session-dbus.h index 091ad26292..175e29a93f 100644 --- a/src/login/logind-session-dbus.h +++ b/src/login/logind-session-dbus.h @@ -4,7 +4,10 @@ #include "sd-bus.h" #include "bus-object.h" -#include "logind-session.h" +#include "macro.h" + +typedef struct Manager Manager; +typedef struct Session Session; extern const BusObjectImplementation session_object; diff --git a/src/login/logind-session-device.c b/src/login/logind-session-device.c index 1a22a77e8e..984c1c1eeb 100644 --- a/src/login/logind-session-device.c +++ b/src/login/logind-session-device.c @@ -15,6 +15,10 @@ #include "daemon-util.h" #include "device-util.h" #include "fd-util.h" +#include "logind.h" +#include "logind-device.h" +#include "logind-seat.h" +#include "logind-session.h" #include "logind-session-dbus.h" #include "logind-session-device.h" #include "missing_drm.h" diff --git a/src/login/logind-session-device.h b/src/login/logind-session-device.h index 1c6f12f21b..52cea0f74c 100644 --- a/src/login/logind-session-device.h +++ b/src/login/logind-session-device.h @@ -1,18 +1,19 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef enum DeviceType DeviceType; +#include "list.h" +#include "memory-util.h" + +typedef struct Device Device; +typedef struct Session Session; typedef struct SessionDevice SessionDevice; -#include "list.h" -#include "logind.h" - -enum DeviceType { +typedef enum DeviceType { DEVICE_TYPE_UNKNOWN, DEVICE_TYPE_DRM, DEVICE_TYPE_EVDEV, DEVICE_TYPE_HIDRAW, -}; +} DeviceType; struct SessionDevice { Session *session; diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 7def723723..75ceb650a4 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -24,10 +24,15 @@ #include "format-util.h" #include "fs-util.h" #include "io-util.h" +#include "login-util.h" +#include "logind.h" #include "logind-dbus.h" +#include "logind-seat.h" #include "logind-seat-dbus.h" #include "logind-session-dbus.h" +#include "logind-session-device.h" #include "logind-session.h" +#include "logind-user.h" #include "logind-user-dbus.h" #include "logind-varlink.h" #include "mkdir-label.h" diff --git a/src/login/logind-session.h b/src/login/logind-session.h index 56ca70da84..923723479c 100644 --- a/src/login/logind-session.h +++ b/src/login/logind-session.h @@ -1,14 +1,20 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Session Session; -typedef enum KillWhom KillWhom; +#include "sd-bus.h" +#include "sd-event.h" +#include "sd-varlink.h" +#include "hashmap.h" #include "list.h" -#include "login-util.h" -#include "logind-user.h" #include "pidref.h" #include "string-util.h" +#include "time-util.h" + +typedef struct Manager Manager; +typedef struct Seat Seat; +typedef struct Session Session; +typedef struct User User; typedef enum SessionState { SESSION_OPENING, /* Session scope is being created */ @@ -85,12 +91,12 @@ typedef enum SessionType { #define SESSION_TYPE_IS_GRAPHICAL(type) IN_SET(type, SESSION_X11, SESSION_WAYLAND, SESSION_MIR) -enum KillWhom { +typedef enum KillWhom { KILL_LEADER, KILL_ALL, _KILL_WHOM_MAX, _KILL_WHOM_INVALID = -EINVAL, -}; +} KillWhom; typedef enum TTYValidity { TTY_FROM_PAM, diff --git a/src/login/logind-user-dbus.h b/src/login/logind-user-dbus.h index ba530bede2..33f810f7f5 100644 --- a/src/login/logind-user-dbus.h +++ b/src/login/logind-user-dbus.h @@ -3,7 +3,10 @@ #include "sd-bus.h" -#include "logind-user.h" +#include "bus-object.h" +#include "macro.h" + +typedef struct User User; extern const BusObjectImplementation user_object; diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 276d5b86f5..1ef3218826 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -19,7 +19,9 @@ #include "hashmap.h" #include "label-util.h" #include "limits-util.h" +#include "logind.h" #include "logind-dbus.h" +#include "logind-seat.h" #include "logind-user-dbus.h" #include "logind-user.h" #include "mkdir-label.h" diff --git a/src/login/logind-user.h b/src/login/logind-user.h index 5c82f490f2..88b5d06bdf 100644 --- a/src/login/logind-user.h +++ b/src/login/logind-user.h @@ -1,13 +1,16 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct User User; +#include "sd-event.h" #include "conf-parser.h" #include "list.h" -#include "logind.h" #include "user-record.h" +typedef struct Manager Manager; +typedef struct Session Session; +typedef struct User User; + typedef enum UserState { USER_OFFLINE, /* Not logged in at all */ USER_OPENING, /* Is logging in */ diff --git a/src/login/logind-utmp.c b/src/login/logind-utmp.c index 47a293914b..228bcf97d1 100644 --- a/src/login/logind-utmp.c +++ b/src/login/logind-utmp.c @@ -1,5 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include "log.h" +#include "logind.h" +#include "logind-session.h" #include "logind-utmp.h" #include "path-util.h" #include "process-util.h" diff --git a/src/login/logind-utmp.h b/src/login/logind-utmp.h index 1358e27840..5309132c77 100644 --- a/src/login/logind-utmp.h +++ b/src/login/logind-utmp.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "logind.h" +typedef struct Manager Manager; int manager_read_utmp(Manager *m); void manager_connect_utmp(Manager *m); diff --git a/src/login/logind-varlink.c b/src/login/logind-varlink.c index ce2b48cdc1..b8181c76f9 100644 --- a/src/login/logind-varlink.c +++ b/src/login/logind-varlink.c @@ -6,7 +6,9 @@ #include "json-util.h" #include "logind.h" #include "logind-dbus.h" +#include "logind-seat.h" #include "logind-session-dbus.h" +#include "logind-user.h" #include "logind-varlink.h" #include "terminal-util.h" #include "user-util.h" diff --git a/src/login/logind-varlink.h b/src/login/logind-varlink.h index bcf2af4fed..3a8e43d9d9 100644 --- a/src/login/logind-varlink.h +++ b/src/login/logind-varlink.h @@ -3,8 +3,8 @@ #include "sd-bus.h" -#include "logind.h" -#include "logind-session.h" +typedef struct Manager Manager; +typedef struct Session Session; int manager_varlink_init(Manager *m); void manager_varlink_done(Manager *m); diff --git a/src/login/logind.c b/src/login/logind.c index f1e2ea3c46..e07b9e5296 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -25,9 +25,14 @@ #include "format-util.h" #include "fs-util.h" #include "logind.h" +#include "logind-button.h" #include "logind-dbus.h" +#include "logind-device.h" +#include "logind-seat.h" #include "logind-seat-dbus.h" #include "logind-session-dbus.h" +#include "logind-session-device.h" +#include "logind-user.h" #include "logind-user-dbus.h" #include "logind-utmp.h" #include "logind-varlink.h" diff --git a/src/login/logind.h b/src/login/logind.h index 35d4e9c257..7ae30c5b63 100644 --- a/src/login/logind.h +++ b/src/login/logind.h @@ -13,18 +13,18 @@ #include "conf-parser.h" #include "hashmap.h" #include "list.h" +#include "logind-action.h" #include "set.h" #include "time-util.h" #include "user-record.h" -typedef struct Manager Manager; +typedef struct Button Button; +typedef struct Device Device; +typedef struct Seat Seat; +typedef struct Session Session; +typedef struct User User; -#include "logind-action.h" -#include "logind-button.h" -#include "logind-device.h" -#include "logind-inhibit.h" - -struct Manager { +typedef struct Manager { sd_event *event; sd_bus *bus; @@ -150,7 +150,7 @@ struct Manager { dual_timestamp init_ts; sd_varlink_server *varlink_server; -}; +} Manager; void manager_reset_config(Manager *m); int manager_parse_config_file(Manager *m); diff --git a/src/login/test-login-tables.c b/src/login/test-login-tables.c index 9be781ce2d..76b62aa621 100644 --- a/src/login/test-login-tables.c +++ b/src/login/test-login-tables.c @@ -2,6 +2,7 @@ #include "logind-action.h" #include "logind-session.h" +#include "logind-user.h" #include "sleep-config.h" #include "test-tables.h" #include "tests.h"