version 1.34, 2009/11/26 21:37:13 |
version 1.35, 2009/12/03 22:50:09 |
|
|
|
|
if (getcwd(data.cwd, sizeof data.cwd) == NULL) |
if (getcwd(data.cwd, sizeof data.cwd) == NULL) |
*data.cwd = '\0'; |
*data.cwd = '\0'; |
|
|
term = getenv("TERM"); |
term = getenv("TERM"); |
if (term == NULL || |
if (term == NULL || |
strlcpy(data.term, term, sizeof data.term) >= sizeof data.term) |
strlcpy(data.term, term, sizeof data.term) >= sizeof data.term) |
|
|
struct msg_environ_data data; |
struct msg_environ_data data; |
char **var; |
char **var; |
|
|
for (var = environ; *var != NULL; var++) { |
for (var = environ; *var != NULL; var++) { |
if (strlcpy(data.var, *var, sizeof data.var) >= sizeof data.var) |
if (strlcpy(data.var, *var, sizeof data.var) >= sizeof data.var) |
continue; |
continue; |
client_write_server(MSG_ENVIRON, &data, sizeof data); |
client_write_server(MSG_ENVIRON, &data, sizeof data); |
|
|
void |
void |
client_write_server(enum msgtype type, void *buf, size_t len) |
client_write_server(enum msgtype type, void *buf, size_t len) |
{ |
{ |
imsg_compose(&client_ibuf, type, PROTOCOL_VERSION, -1, -1, buf, len); |
imsg_compose(&client_ibuf, type, PROTOCOL_VERSION, -1, -1, buf, len); |
} |
} |
|
|
void |
void |
|
|
|
|
/* Note: event_init() has already been called. */ |
/* Note: event_init() has already been called. */ |
|
|
/* Set up signals. */ |
/* Set up signals. */ |
memset(&sigact, 0, sizeof sigact); |
memset(&sigact, 0, sizeof sigact); |
sigemptyset(&sigact.sa_mask); |
sigemptyset(&sigact.sa_mask); |
sigact.sa_flags = SA_RESTART; |
sigact.sa_flags = SA_RESTART; |
|
|
if (client_dispatch() != 0) { |
if (client_dispatch() != 0) { |
event_loopexit(NULL); |
event_loopexit(NULL); |
return; |
return; |
} |
} |
} |
} |
|
|
if (events & EV_WRITE) { |
if (events & EV_WRITE) { |
if (msgbuf_write(&client_ibuf.w) < 0) |
if (msgbuf_write(&client_ibuf.w) < 0) |
goto lost_server; |
goto lost_server; |
|
|
if (datalen != sizeof lockdata) |
if (datalen != sizeof lockdata) |
fatalx("bad MSG_LOCK size"); |
fatalx("bad MSG_LOCK size"); |
memcpy(&lockdata, imsg.data, sizeof lockdata); |
memcpy(&lockdata, imsg.data, sizeof lockdata); |
|
|
lockdata.cmd[(sizeof lockdata.cmd) - 1] = '\0'; |
lockdata.cmd[(sizeof lockdata.cmd) - 1] = '\0'; |
system(lockdata.cmd); |
system(lockdata.cmd); |
client_write_server(MSG_UNLOCK, NULL, 0); |
client_write_server(MSG_UNLOCK, NULL, 0); |