forked from github/abduco
Expose current session name as $ABDUCO_SESSION
The supervised command can use it to determine in which session it is running. It is not necessarily identical to the file name of the underlying socket as stored in the file system.
This commit is contained in:
parent
0681dc8daf
commit
4c3e2c8c70
2
abduco.1
2
abduco.1
|
|
@ -142,6 +142,8 @@ is not specified, the environment variable
|
|||
is examined, if it is not set
|
||||
.Xr dvtm 1
|
||||
is executed.
|
||||
.It Ev ABDUCO_SESSION
|
||||
The current session name available to the supervised command.
|
||||
.El
|
||||
.Pp
|
||||
See the
|
||||
|
|
|
|||
13
abduco.c
13
abduco.c
|
|
@ -353,6 +353,9 @@ static bool create_socket_dir(struct sockaddr_un *sockaddr) {
|
|||
|
||||
static bool set_socket_name(struct sockaddr_un *sockaddr, const char *name) {
|
||||
const size_t maxlen = sizeof(sockaddr->sun_path);
|
||||
const char *session_name = NULL;
|
||||
char buf[maxlen];
|
||||
|
||||
if (name[0] == '/') {
|
||||
if (strlen(name) >= maxlen) {
|
||||
errno = ENAMETOOLONG;
|
||||
|
|
@ -360,7 +363,7 @@ static bool set_socket_name(struct sockaddr_un *sockaddr, const char *name) {
|
|||
}
|
||||
strncpy(sockaddr->sun_path, name, maxlen);
|
||||
} else if (name[0] == '.' && (name[1] == '.' || name[1] == '/')) {
|
||||
char buf[maxlen], *cwd = getcwd(buf, sizeof buf);
|
||||
char *cwd = getcwd(buf, sizeof buf);
|
||||
if (!cwd)
|
||||
return false;
|
||||
if (!xsnprintf(sockaddr->sun_path, maxlen, "%s/%s", cwd, name))
|
||||
|
|
@ -372,9 +375,17 @@ static bool set_socket_name(struct sockaddr_un *sockaddr, const char *name) {
|
|||
errno = ENAMETOOLONG;
|
||||
return false;
|
||||
}
|
||||
session_name = name;
|
||||
strncat(sockaddr->sun_path, name, maxlen - strlen(sockaddr->sun_path) - 1);
|
||||
strncat(sockaddr->sun_path, server.host, maxlen - strlen(sockaddr->sun_path) - 1);
|
||||
}
|
||||
|
||||
if (!session_name) {
|
||||
strncpy(buf, sockaddr->sun_path, sizeof buf);
|
||||
session_name = basename(buf);
|
||||
}
|
||||
setenv("ABDUCO_SESSION", session_name, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue