version 1.102, 2011/01/12 22:23:58 |
version 1.103, 2011/01/23 11:03:43 |
|
|
char socket_path[MAXPATHLEN]; |
char socket_path[MAXPATHLEN]; |
int login_shell; |
int login_shell; |
char *environ_path; |
char *environ_path; |
pid_t environ_pid; |
pid_t environ_pid = -1; |
u_int environ_idx; |
int environ_idx = -1; |
|
|
__dead void usage(void); |
__dead void usage(void); |
void parseenvironment(void); |
void parseenvironment(void); |
|
|
void |
void |
parseenvironment(void) |
parseenvironment(void) |
{ |
{ |
char *env, *path_pid, *pid_idx, buf[256]; |
char *env, path[256]; |
size_t len; |
long pid; |
const char *errstr; |
int idx; |
long long ll; |
|
|
|
environ_pid = -1; |
|
if ((env = getenv("TMUX")) == NULL) |
if ((env = getenv("TMUX")) == NULL) |
return; |
return; |
|
|
if ((path_pid = strchr(env, ',')) == NULL || path_pid == env) |
if (sscanf(env, "%255s,%ld,%d", path, &pid, &idx) != 3) |
return; |
return; |
if ((pid_idx = strchr(path_pid + 1, ',')) == NULL) |
environ_path = xstrdup(path); |
return; |
environ_pid = pid; |
if ((pid_idx == path_pid + 1 || pid_idx[1] == '\0')) |
environ_idx = idx; |
return; |
|
|
|
/* path */ |
|
len = path_pid - env; |
|
environ_path = xmalloc(len + 1); |
|
memcpy(environ_path, env, len); |
|
environ_path[len] = '\0'; |
|
|
|
/* pid */ |
|
len = pid_idx - path_pid - 1; |
|
if (len > (sizeof buf) - 1) |
|
return; |
|
memcpy(buf, path_pid + 1, len); |
|
buf[len] = '\0'; |
|
|
|
ll = strtonum(buf, 0, LONG_MAX, &errstr); |
|
if (errstr != NULL) |
|
return; |
|
environ_pid = ll; |
|
|
|
/* idx */ |
|
ll = strtonum(pid_idx + 1, 0, UINT_MAX, &errstr); |
|
if (errstr != NULL) |
|
return; |
|
environ_idx = ll; |
|
} |
} |
|
|
char * |
char * |