version 1.164, 2015/10/28 09:51:55 |
version 1.165, 2015/10/31 08:13:58 |
|
|
c->environ = environ_create(); |
c->environ = environ_create(); |
|
|
c->fd = -1; |
c->fd = -1; |
c->cwd = -1; |
c->cwd = NULL; |
|
|
c->cmdq = cmdq_new(c); |
c->cmdq = cmdq_new(c); |
c->cmdq->client_exit = 1; |
c->cmdq->client_exit = 1; |
|
|
screen_free(&c->status); |
screen_free(&c->status); |
|
|
free(c->title); |
free(c->title); |
close(c->cwd); |
free((void *)c->cwd); |
|
|
evtimer_del(&c->repeat_timer); |
evtimer_del(&c->repeat_timer); |
|
|
|
|
void |
void |
server_client_dispatch_identify(struct client *c, struct imsg *imsg) |
server_client_dispatch_identify(struct client *c, struct imsg *imsg) |
{ |
{ |
const char *data; |
const char *data, *home; |
size_t datalen; |
size_t datalen; |
int flags; |
int flags; |
|
|
|
|
case MSG_IDENTIFY_CWD: |
case MSG_IDENTIFY_CWD: |
if (datalen == 0 || data[datalen - 1] != '\0') |
if (datalen == 0 || data[datalen - 1] != '\0') |
fatalx("bad MSG_IDENTIFY_CWD string"); |
fatalx("bad MSG_IDENTIFY_CWD string"); |
if ((c->cwd = open(data, O_RDONLY)) == -1) |
if (access(data, X_OK) == 0) |
c->cwd = open("/", O_RDONLY); |
c->cwd = xstrdup(data); |
|
else if ((home = find_home()) != NULL) |
|
c->cwd = xstrdup(home); |
|
else |
|
c->cwd = xstrdup("/"); |
log_debug("client %p IDENTIFY_CWD %s", c, data); |
log_debug("client %p IDENTIFY_CWD %s", c, data); |
break; |
break; |
case MSG_IDENTIFY_STDIN: |
case MSG_IDENTIFY_STDIN: |