aboutsummaryrefslogtreecommitdiffstats
path: root/libenv_get_complete_list.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2025-01-30 18:42:27 +0100
committerMattias Andrée <m@maandree.se>2025-01-30 18:42:27 +0100
commitaebf2524909f0c0e3aec7f78fa01ad908f7da3a0 (patch)
tree86881e1b1b299990e6726eda5dde3f1f77c4f180 /libenv_get_complete_list.c
downloadlibenv-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 '')
-rw-r--r--libenv_get_complete_list.c211
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;
+}