mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-20 05:33:47 -04:00
utmp: rewrite utmp logging
This patch generalizes the utmp support, to not only support libutempter, but also ulog (and in the future, even more interfaces). * Rename config option main.utempter to main.utmp-helper * Add meson option -Dutmp-backend=none|libutempter|ulog|auto * Rename meson option -Ddefault-utempter-path to -Dutmp-default-helper-path * utmp is no longer detected at compile time, but at runtime instead. Meson will configure the following pre-processor macros, based on the selected utmp backend: * UTMP_ADD - argument to pass to utmp helper when adding a record (starting foot) * UTMP_DEL - argument to pass to utmp helper when removing a record (exiting foot) * UTMP_DEL_HAVE_ARGUMENT - if defined, UTMP_DEL expects an extra argument ($WAYLAND_DISPLAY) * UTMP_DEFAULT_HELPER_PATH - path to the default utmp helper binary The documentation has been updated to mention which arguments are passed to the helper binary. Closes #1314
This commit is contained in:
parent
a2f765b72a
commit
e78319fccd
11 changed files with 159 additions and 58 deletions
41
config.c
41
config.c
|
|
@ -1009,13 +1009,29 @@ parse_section_main(struct context *ctx)
|
|||
else if (strcmp(key, "box-drawings-uses-font-glyphs") == 0)
|
||||
return value_to_bool(ctx, &conf->box_drawings_uses_font_glyphs);
|
||||
|
||||
else if (strcmp(key, "utempter") == 0) {
|
||||
if (!value_to_str(ctx, &conf->utempter_path))
|
||||
else if (strcmp(key, "utmp-helper") == 0 || strcmp(key, "utempter") == 0) {
|
||||
if (strcmp(key, "utempter") == 0) {
|
||||
struct user_notification deprecation = {
|
||||
.kind = USER_NOTIFICATION_DEPRECATED,
|
||||
.text = xasprintf(
|
||||
"%s:%d: \033[1m[main].utempter\033[22m, "
|
||||
"use \033[1m[main].utmp-helper\033[22m instead",
|
||||
ctx->path, ctx->lineno),
|
||||
};
|
||||
tll_push_back(conf->notifications, deprecation);
|
||||
|
||||
LOG_WARN(
|
||||
"%s:%d: [main].utempter is deprecated, "
|
||||
"use [main].utmp-helper instead",
|
||||
ctx->path, ctx->lineno);
|
||||
}
|
||||
|
||||
if (!value_to_str(ctx, &conf->utmp_helper_path))
|
||||
return false;
|
||||
|
||||
if (strcmp(conf->utempter_path, "none") == 0) {
|
||||
free(conf->utempter_path);
|
||||
conf->utempter_path = NULL;
|
||||
if (strcmp(conf->utmp_helper_path, "none") == 0) {
|
||||
free(conf->utmp_helper_path);
|
||||
conf->utmp_helper_path = NULL;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -3019,9 +3035,12 @@ config_load(struct config *conf, const char *conf_path,
|
|||
},
|
||||
|
||||
.env_vars = tll_init(),
|
||||
.utempter_path = (strlen(FOOT_DEFAULT_UTEMPTER_PATH) > 0
|
||||
? xstrdup(FOOT_DEFAULT_UTEMPTER_PATH)
|
||||
: NULL),
|
||||
#if defined(UTMP_DEFAULT_HELPER_PATH)
|
||||
.utmp_helper_path = ((strlen(UTMP_DEFAULT_HELPER_PATH) > 0 &&
|
||||
access(UTMP_DEFAULT_HELPER_PATH, X_OK) == 0)
|
||||
? xstrdup(UTMP_DEFAULT_HELPER_PATH)
|
||||
: NULL),
|
||||
#endif
|
||||
.notifications = tll_init(),
|
||||
};
|
||||
|
||||
|
|
@ -3310,8 +3329,8 @@ config_clone(const struct config *old)
|
|||
tll_push_back(conf->env_vars, copy);
|
||||
}
|
||||
|
||||
conf->utempter_path =
|
||||
old->utempter_path != NULL ? xstrdup(old->utempter_path) : NULL;
|
||||
conf->utmp_helper_path =
|
||||
old->utmp_helper_path != NULL ? xstrdup(old->utmp_helper_path) : NULL;
|
||||
|
||||
conf->notifications.length = 0;
|
||||
conf->notifications.head = conf->notifications.tail = 0;
|
||||
|
|
@ -3379,7 +3398,7 @@ config_free(struct config *conf)
|
|||
tll_remove(conf->env_vars, it);
|
||||
}
|
||||
|
||||
free(conf->utempter_path);
|
||||
free(conf->utmp_helper_path);
|
||||
user_notifications_free(&conf->notifications);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue