summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Lohmann <20h@r-36.net>2012-10-28 06:54:08 +0100
committerChristoph Lohmann <20h@r-36.net>2012-10-28 06:54:08 +0100
commit91804d72273e18ab9f4022f3dc1cc7d90eb3fea0 (patch)
treed70f3fe9ae3602685ac31745b710bef22962cd0e
parent4abecf9ce46680bf5dd3824554eb0a506bb51524 (diff)
Applying the patch of Roberto Caballero to set WINDOWID and all the pwuid()
variables. Thanks! xinit() and ttynew() had to be switched in their call-appearance. Otherwise xw.win is not set.
-rw-r--r--st.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/st.c b/st.c
index 3cd7831..f54e4d5 100644
--- a/st.c
+++ b/st.c
@@ -5,6 +5,7 @@
#include <fcntl.h>
#include <limits.h>
#include <locale.h>
+#include <pwd.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
@@ -881,11 +882,23 @@ void
execsh(void) {
char **args;
char *envshell = getenv("SHELL");
+ const struct passwd *pass = getpwuid(getuid());
+ char buf[sizeof(long) * 8 + 1];
unsetenv("COLUMNS");
unsetenv("LINES");
unsetenv("TERMCAP");
+ if(pass) {
+ setenv("LOGNAME", pass->pw_name, 1);
+ setenv("USER", pass->pw_name, 1);
+ setenv("SHELL", pass->pw_shell, 0);
+ setenv("HOME", pass->pw_dir, 0);
+ }
+
+ snprintf(buf, sizeof(buf), "%lu", xw.win);
+ setenv("WINDOWID", buf, 1);
+
signal(SIGCHLD, SIG_DFL);
signal(SIGHUP, SIG_DFL);
signal(SIGINT, SIG_DFL);
@@ -2795,8 +2808,8 @@ main(int argc, char *argv[]) {
run:
setlocale(LC_CTYPE, "");
tnew(80, 24);
- ttynew();
xinit();
+ ttynew();
selinit();
run();
return 0;