|
|
@ -5,6 +5,7 @@ |
|
|
|
#include <fcntl.h> |
|
|
|
#include <fcntl.h> |
|
|
|
#include <limits.h> |
|
|
|
#include <limits.h> |
|
|
|
#include <locale.h> |
|
|
|
#include <locale.h> |
|
|
|
|
|
|
|
#include <pwd.h> |
|
|
|
#include <stdarg.h> |
|
|
|
#include <stdarg.h> |
|
|
|
#include <stdbool.h> |
|
|
|
#include <stdbool.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <stdio.h> |
|
|
@ -881,11 +882,23 @@ void |
|
|
|
execsh(void) { |
|
|
|
execsh(void) { |
|
|
|
char **args; |
|
|
|
char **args; |
|
|
|
char *envshell = getenv("SHELL"); |
|
|
|
char *envshell = getenv("SHELL"); |
|
|
|
|
|
|
|
const struct passwd *pass = getpwuid(getuid()); |
|
|
|
|
|
|
|
char buf[sizeof(long) * 8 + 1]; |
|
|
|
|
|
|
|
|
|
|
|
unsetenv("COLUMNS"); |
|
|
|
unsetenv("COLUMNS"); |
|
|
|
unsetenv("LINES"); |
|
|
|
unsetenv("LINES"); |
|
|
|
unsetenv("TERMCAP"); |
|
|
|
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(SIGCHLD, SIG_DFL); |
|
|
|
signal(SIGHUP, SIG_DFL); |
|
|
|
signal(SIGHUP, SIG_DFL); |
|
|
|
signal(SIGINT, SIG_DFL); |
|
|
|
signal(SIGINT, SIG_DFL); |
|
|
@ -2795,8 +2808,8 @@ main(int argc, char *argv[]) { |
|
|
|
run: |
|
|
|
run: |
|
|
|
setlocale(LC_CTYPE, ""); |
|
|
|
setlocale(LC_CTYPE, ""); |
|
|
|
tnew(80, 24); |
|
|
|
tnew(80, 24); |
|
|
|
ttynew(); |
|
|
|
|
|
|
|
xinit(); |
|
|
|
xinit(); |
|
|
|
|
|
|
|
ttynew(); |
|
|
|
selinit(); |
|
|
|
selinit(); |
|
|
|
run(); |
|
|
|
run(); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|