summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorJérémie Courrèges-Anglas <jca@wxcvbn.org>2013-11-21 23:35:15 +0100
committerJérémie Courrèges-Anglas <jca@wxcvbn.org>2013-11-21 23:35:15 +0100
commit407dc8b5e6a4db430381000256c87ba313bbed5e (patch)
tree6d30de84132f70586af80fc0e346a8ac8f92703e /src/window.c
parent1ecaccd77c18036d8ff4c137487aa8c5a04d2b36 (diff)
downloadratpoison-407dc8b5e6a4db430381000256c87ba313bbed5e.zip
Don't assume getsid succeeds, fixes %p "glitches"
* on eg. OpenBSD you get -1 with errno set to EPERM if you call getsid on a pid no in the same session group as you. This makes the session id check much less useful, and exhibits glitches with %p in winfmt. For now, just bail out if getsid fails...
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/window.c b/src/window.c
index 15024f6..8955919 100644
--- a/src/window.c
+++ b/src/window.c
@@ -156,8 +156,18 @@ get_child_info (Window w)
PRINT_DEBUG(("pid: %d\n", pid));
- /* The pids will hopefully be in the same session. */
+ /*
+ The pids will hopefully be in the same session.
+
+ XXX what's the use of this session check?
+ On some platforms (eg. OpenBSD) you get EPERM if `pid' is not in the
+ same session as ratpoison. This makes stuff like %p in winformat much
+ less useful...
+ */
sid = getsid (pid);
+ if (sid == -1)
+ return NULL;
+
list_for_each_entry (cur, &rp_children, node)
{
PRINT_DEBUG(("cur->pid=%d sid=%d\n", cur->pid, getsid (cur->pid)));