diff options
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 17 |
1 files changed, 11 insertions, 6 deletions
@@ -1153,16 +1153,22 @@ execsh(void) { | |||
1153 | else | 1153 | else |
1154 | die("who are you?\n"); | 1154 | die("who are you?\n"); |
1155 | } | 1155 | } |
1156 | unsetenv("COLUMNS"); | ||
1157 | unsetenv("LINES"); | ||
1158 | unsetenv("TERMCAP"); | ||
1159 | 1156 | ||
1160 | sh = (pw->pw_shell[0]) ? pw->pw_shell : shell; | 1157 | if (utmp) |
1158 | sh = utmp; | ||
1159 | else if (pw->pw_shell[0]) | ||
1160 | sh = pw->pw_shell; | ||
1161 | else | ||
1162 | sh = shell; | ||
1163 | args = (opt_cmd) ? opt_cmd : (char *[]){sh, NULL}; | ||
1161 | snprintf(buf, sizeof(buf), "%lu", xw.win); | 1164 | snprintf(buf, sizeof(buf), "%lu", xw.win); |
1162 | 1165 | ||
1166 | unsetenv("COLUMNS"); | ||
1167 | unsetenv("LINES"); | ||
1168 | unsetenv("TERMCAP"); | ||
1163 | setenv("LOGNAME", pw->pw_name, 1); | 1169 | setenv("LOGNAME", pw->pw_name, 1); |
1164 | setenv("USER", pw->pw_name, 1); | 1170 | setenv("USER", pw->pw_name, 1); |
1165 | setenv("SHELL", sh, 1); | 1171 | setenv("SHELL", args[0], 1); |
1166 | setenv("HOME", pw->pw_dir, 1); | 1172 | setenv("HOME", pw->pw_dir, 1); |
1167 | setenv("TERM", termname, 1); | 1173 | setenv("TERM", termname, 1); |
1168 | setenv("WINDOWID", buf, 1); | 1174 | setenv("WINDOWID", buf, 1); |
@@ -1174,7 +1180,6 @@ execsh(void) { | |||
1174 | signal(SIGTERM, SIG_DFL); | 1180 | signal(SIGTERM, SIG_DFL); |
1175 | signal(SIGALRM, SIG_DFL); | 1181 | signal(SIGALRM, SIG_DFL); |
1176 | 1182 | ||
1177 | args = opt_cmd ? opt_cmd : (char *[]){sh, "-i", NULL}; | ||
1178 | execvp(args[0], args); | 1183 | execvp(args[0], args); |
1179 | exit(EXIT_FAILURE); | 1184 | exit(EXIT_FAILURE); |
1180 | } | 1185 | } |