mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 14:18:26 +02:00
Code to get peer pid on a few more platforms
This commit is contained in:
22
glfw/wl_init.c
vendored
22
glfw/wl_init.c
vendored
@@ -633,21 +633,25 @@ GLFWAPI GLFWColorScheme glfwGetCurrentSystemColorTheme(void) {
|
|||||||
return glfw_current_system_color_theme();
|
return glfw_current_system_color_theme();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
static pid_t
|
static pid_t
|
||||||
get_socket_peer_pid(int fd) {
|
get_socket_peer_pid(int fd) {
|
||||||
|
#ifdef __linux__
|
||||||
struct ucred ucred;
|
struct ucred ucred;
|
||||||
socklen_t len = sizeof(struct ucred);
|
socklen_t len = sizeof(struct ucred);
|
||||||
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) == -1) {
|
return (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) == -1) ? -1 : ucred.pid;
|
||||||
perror("getsockopt failed");
|
#elif defined(LOCAL_PEERCRED) && defined(XUCRED_VERSION)
|
||||||
return -1;
|
struct xucred peercred;
|
||||||
}
|
socklen_t peercredlen = sizeof(peercred);
|
||||||
return ucred.pid;
|
return (getsockopt(c->fd, LOCAL_PEERCRED, 1, (void *)&peercred, &peercredlen) == 0 && peercred.cr_version == XUCRED_VERSION) ? peercred.cr_pid : -1;
|
||||||
}
|
#elif defined(LOCAL_PEERPID)
|
||||||
|
pid_t pid;
|
||||||
|
socklen_t pid_size = sizeof(pid);
|
||||||
|
return getsockopt(client, SOL_LOCAL, LOCAL_PEERPID, &pid, &pid_size) == -1 ? -1 : pid;
|
||||||
#else
|
#else
|
||||||
static pid_t
|
errno = ENOSYS;
|
||||||
get_socket_peer_pid(int fd) { return -1; }
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
GLFWAPI pid_t glfwWaylandCompositorPID(void) {
|
GLFWAPI pid_t glfwWaylandCompositorPID(void) {
|
||||||
if (!_glfw.wl.display) return -1;
|
if (!_glfw.wl.display) return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user