version 1.61, 2009/11/26 21:37:13 |
version 1.62, 2009/12/03 22:50:10 |
|
|
main(int argc, char **argv) |
main(int argc, char **argv) |
{ |
{ |
struct cmd_list *cmdlist; |
struct cmd_list *cmdlist; |
struct cmd *cmd; |
struct cmd *cmd; |
enum msgtype msg; |
enum msgtype msg; |
struct passwd *pw; |
struct passwd *pw; |
struct options *so, *wo; |
struct options *so, *wo; |
|
|
} |
} |
|
|
environ_init(&global_environ); |
environ_init(&global_environ); |
for (var = environ; *var != NULL; var++) |
for (var = environ; *var != NULL; var++) |
environ_put(&global_environ, *var); |
environ_put(&global_environ, *var); |
|
|
options_init(&global_s_options, NULL); |
options_init(&global_s_options, NULL); |
|
|
options_set_string(wo, "window-status-format", "#I:#W#F"); |
options_set_string(wo, "window-status-format", "#I:#W#F"); |
options_set_string(wo, "window-status-current-format", "#I:#W#F"); |
options_set_string(wo, "window-status-current-format", "#I:#W#F"); |
options_set_number(wo, "xterm-keys", 0); |
options_set_number(wo, "xterm-keys", 0); |
options_set_number(wo, "remain-on-exit", 0); |
options_set_number(wo, "remain-on-exit", 0); |
options_set_number(wo, "synchronize-panes", 0); |
options_set_number(wo, "synchronize-panes", 0); |
|
|
if (flags & IDENTIFY_UTF8) { |
if (flags & IDENTIFY_UTF8) { |
options_set_number(so, "status-utf8", 1); |
options_set_number(so, "status-utf8", 1); |
options_set_number(wo, "utf8", 1); |
options_set_number(wo, "utf8", 1); |
} else { |
} else { |
|
|
exit(1); |
exit(1); |
} |
} |
} |
} |
|
|
if (label == NULL) |
if (label == NULL) |
label = xstrdup("default"); |
label = xstrdup("default"); |
if (path == NULL && (path = makesockpath(label)) == NULL) { |
if (path == NULL && (path = makesockpath(label)) == NULL) { |
|
|
len = 0; |
len = 0; |
} else { |
} else { |
fill_session(&cmddata); |
fill_session(&cmddata); |
|
|
cmddata.argc = argc; |
cmddata.argc = argc; |
if (cmd_pack_argv( |
if (cmd_pack_argv( |
argc, argv, cmddata.argv, sizeof cmddata.argv) != 0) { |
argc, argv, cmddata.argv, sizeof cmddata.argv) != 0) { |
log_warnx("command too long"); |
log_warnx("command too long"); |
exit(1); |
exit(1); |
} |
} |
|
|
msg = MSG_COMMAND; |
msg = MSG_COMMAND; |
buf = &cmddata; |
buf = &cmddata; |
len = sizeof cmddata; |
len = sizeof cmddata; |
|
|
|
|
event_init(); |
event_init(); |
|
|
imsg_compose(main_ibuf, msg, PROTOCOL_VERSION, -1, -1, buf, len); |
imsg_compose(main_ibuf, msg, PROTOCOL_VERSION, -1, -1, buf, len); |
|
|
main_set_signals(); |
main_set_signals(); |
|
|
|
|
fatal("sigaction failed"); |
fatal("sigaction failed"); |
if (sigaction(SIGTSTP, &sigact, NULL) != 0) |
if (sigaction(SIGTSTP, &sigact, NULL) != 0) |
fatal("sigaction failed"); |
fatal("sigaction failed"); |
|
|
signal_set(&main_ev_sigterm, SIGTERM, main_signal, NULL); |
signal_set(&main_ev_sigterm, SIGTERM, main_signal, NULL); |
signal_add(&main_ev_sigterm, NULL); |
signal_add(&main_ev_sigterm, NULL); |
} |
} |
|
|
fatal("sigaction failed"); |
fatal("sigaction failed"); |
if (sigaction(SIGTSTP, &sigact, NULL) != 0) |
if (sigaction(SIGTSTP, &sigact, NULL) != 0) |
fatal("sigaction failed"); |
fatal("sigaction failed"); |
|
|
event_del(&main_ev_sigterm); |
event_del(&main_ev_sigterm); |
} |
} |
|
|
|
|
|
|
if (events & EV_READ) |
if (events & EV_READ) |
main_dispatch(shellcmd); |
main_dispatch(shellcmd); |
|
|
if (events & EV_WRITE) { |
if (events & EV_WRITE) { |
if (msgbuf_write(&main_ibuf->w) < 0) |
if (msgbuf_write(&main_ibuf->w) < 0) |
fatalx("msgbuf_write failed"); |
fatalx("msgbuf_write failed"); |