diff options
author | Mattias Andrée <m@maandree.se> | 2025-01-30 18:42:27 +0100 |
---|---|---|
committer | Mattias Andrée <m@maandree.se> | 2025-01-30 18:42:27 +0100 |
commit | aebf2524909f0c0e3aec7f78fa01ad908f7da3a0 (patch) | |
tree | 86881e1b1b299990e6726eda5dde3f1f77c4f180 /libenv_get_complete_list.c | |
download | libenv-aebf2524909f0c0e3aec7f78fa01ad908f7da3a0.tar.gz libenv-aebf2524909f0c0e3aec7f78fa01ad908f7da3a0.tar.bz2 libenv-aebf2524909f0c0e3aec7f78fa01ad908f7da3a0.tar.xz |
First commit
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libenv_get_complete_list.c')
-rw-r--r-- | libenv_get_complete_list.c | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/libenv_get_complete_list.c b/libenv_get_complete_list.c new file mode 100644 index 0000000..9a542c9 --- /dev/null +++ b/libenv_get_complete_list.c @@ -0,0 +1,211 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" + +#define NCLASSWORDS 1U + + +#define _(E) ((uint64_t)1 << (E)) + +#define SU_SAFE _(LIBENV_SU_SAFE) +#define SU_UNSAFE _(LIBENV_SU_UNSAFE) +#define LOGIN_SAFE _(LIBENV_LOGIN_SAFE) +#define LOGIN_UNSAFE _(LIBENV_LOGIN_UNSAFE) +#define REMOTE_SAFE _(LIBENV_REMOTE_SAFE) +#define REMOTE_UNSAFE _(LIBENV_REMOTE_UNSAFE) +#define PATH (_(LIBENV_PATH) | REMOTE_UNSAFE) + +#define DECLARE(VAR, ENUMS_)\ + static const uint64_t VAR[NCLASSWORDS] = {ENUMS_} + +DECLARE(classes__display, _(LIBENV_DISPLAY) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); +DECLARE(classes__display_config, _(LIBENV_DISPLAY_CONFIG) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); +DECLARE(classes__desktop, _(LIBENV_DESKTOP) | SU_SAFE | LOGIN_SAFE | REMOTE_SAFE); +DECLARE(classes__terminal_caps, _(LIBENV_TERMINAL_CAPS) | SU_SAFE | LOGIN_SAFE | REMOTE_SAFE); +DECLARE(classes__local_terminal, _(LIBENV_LOCAL_TERMINAL) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); +DECLARE(classes__locale, _(LIBENV_LOCALE) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); +DECLARE(classes__locale__path, _(LIBENV_LOCALE) | SU_SAFE | LOGIN_UNSAFE | PATH); +DECLARE(classes__timezone, _(LIBENV_TIMEZONE) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); +DECLARE(classes__timezone__path, _(LIBENV_TIMEZONE) | SU_SAFE | LOGIN_UNSAFE | PATH); +DECLARE(classes__session, _(LIBENV_SESSION) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); +DECLARE(classes__theme_config, _(LIBENV_THEME_CONFIG) | SU_SAFE | LOGIN_UNSAFE | REMOTE_SAFE); +DECLARE(classes__theme_plugin, _(LIBENV_THEME_PLUGIN) | SU_UNSAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); +DECLARE(classes__internet, _(LIBENV_INTERNET) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); +DECLARE(classes__audio, _(LIBENV_AUDIO) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); +DECLARE(classes__user, _(LIBENV_USER) | SU_UNSAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); +DECLARE(classes__applications, _(LIBENV_APPLICATIONS) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); +DECLARE(classes__preferences, _(LIBENV_PREFERENCES) | SU_SAFE | LOGIN_UNSAFE | REMOTE_SAFE); +DECLARE(classes__system_paths, _(LIBENV_SYSTEM_PATHS) | SU_SAFE | LOGIN_UNSAFE | PATH); +DECLARE(classes__user_paths, _(LIBENV_USER_PATHS) | SU_SAFE | LOGIN_UNSAFE | PATH); +DECLARE(classes__pwd, _(LIBENV_PWD) | SU_SAFE | LOGIN_UNSAFE | PATH); +DECLARE(classes__exec__path, _(LIBENV_EXEC) | SU_SAFE | LOGIN_UNSAFE | PATH); + +#undef _ +#undef SU_SAFE +#undef SU_UNSAFE +#undef LOGIN_SAFE +#undef LOGIN_UNSAFE +#undef REMOTE_SAFE +#undef REMOTE_UNSAFE +#undef PATH +#undef DECLARE +#define V(S) {S, CLASSES} + + +static struct libenv_variable list[] = { + +#define CLASSES classes__display + V("DISPLAY"), + V("WAYLAND_DISPLAY"), + V("XAUTHORITY"), + V("XDG_SEAT"), + V("XDG_SEAT_PATH"), + V("XDG_VTNR"), +#undef CLASSES + +#define CLASSES classes__display_config + V("SDL_VIDEO_FULLSCREEN_DISPLAY"), + V("XMODIFIERS"), +#undef CLASSES + +#define CLASSES classes__desktop + V("DESKTOP_SESSION"), + V("GTK_CSD"), + V("XDG_SESSION_PATH"), + V("XDG_SESSION_DESKTOP"), + V("XDG_SESSION_TYPE"), + V("XDG_SESSION_CLASS"), + V("XDG_SESSION_ID"), + V("_JAVA_AWT_WM_NOREPARENTING"), +#undef CLASSES + +#define CLASSES classes__terminal_caps + V("TERM"), + V("COLORTERM"), + V("VTE_VERSION"), +#undef CLASSES + +#define CLASSES classes__local_terminal + V("TERMINATOR_UUID"), +#undef CLASSES + +#define CLASSES classes__locale + V("LANG"), + V("LANGUAGE"), + V("LOCALE"), + V("LC_CTYPE"), + V("LC_NUMERIC"), + V("LC_TIME"), + V("LC_COLLATE"), + V("LC_MONETARY"), + V("LC_MESSAGES"), + V("LC_PAPER"), + V("LC_NAME"), + V("LC_ADDRESS"), + V("LC_TELEPHONE"), + V("LC_MEASUREMENT"), + V("LC_IDENTIFICATION"), + V("LC_ALL"), +#undef CLASSES + +#define CLASSES classes__locale__path + V("LOCPATH"), + V("NLSPATH"), +#undef CLASSES + +#define CLASSES classes__timezone + V("TZ"), +#undef CLASSES + +#define CLASSES classes__timezone__path + V("TZDIR"), +#undef CLASSES + +#define CLASSES classes__session + V("SSH_CLIENT"), + V("SSH_CONNECTION"), + V("SSH_TTY"), +#undef CLASSES + +#define CLASSES classes__theme_config + V("LS_COLORS"), +#undef CLASSES + +#define CLASSES classes__theme_plugin + V("GTK_THEME"), + V("QT_STYLE_OVERRIDE"), + V("QT_QPA_PLATFORMTHEME"), +#undef CLASSES + +#define CLASSES classes__internet + V("ftp_proxy"), + V("http_proxy"), +#undef CLASSES + +#define CLASSES classes__audio + V("MAIN_ALSA_MIXER"), + V("MAIN_ALSA_CARD"), +#undef CLASSES + +#define CLASSES classes__user + V("LOGNAME"), + V("HOME"), + V("SHELL"), +#undef CLASSES + +#define CLASSES classes__applications + V("EDITOR"), + V("VISUAL"), + V("BROWSER"), + V("PAGER"), +#undef CLASSES + +#define CLASSES classes__preferences + V("MANSECT"), + V("_JAVA_OPTIONS"), +#undef CLASSES + +#define CLASSES classes__system_paths + V("PATH"), + V("XDG_DATA_DIRS"), + V("XDG_CONFIG_DIRS"), + V("MANPATH"), + V("INFODIR"), + V("JAVA_HOME"), +#undef CLASSES + +#define CLASSES classes__user_paths + V("XDG_SPOOL_HOME"), + V("XDG_CACHE_HOME"), + V("XDG_STATE_HOME"), + V("XDG_RUNTIME_DIR"), + V("XDG_DATA_HOME"), + V("XDG_CONFIG_HOME"), + V("GNUPGHOME"), + V("MPLAYER_HOME"), +#undef CLASSES + +#define CLASSES classes__pwd + V("PWD"), + V("OLDPWD"), +#undef CLASSES + +#define CLASSES classes__exec__path + V("_"), +#undef CLASSES + + {NULL, NULL} +}; + + +#undef V + + +const struct libenv_variable * +libenv_get_complete_list(size_t *nclasswords_out, size_t *count_out) /* TODO test */ +{ + if (nclasswords_out) + *nclasswords_out = NCLASSWORDS; + if (count_out) + *count_out = sizeof(list) / sizeof(*list) - 1U; + return list; +} |