From 1d1b5c2a2854ce0385a89401c504711270c6f7a3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 05:30:44 +0200 Subject: Adding debian version 4.9.1-1. Signed-off-by: Daniel Baumann --- debian/patches/81_session_creation_util.patch | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 debian/patches/81_session_creation_util.patch (limited to 'debian/patches/81_session_creation_util.patch') diff --git a/debian/patches/81_session_creation_util.patch b/debian/patches/81_session_creation_util.patch new file mode 100644 index 0000000..ff90bc6 --- /dev/null +++ b/debian/patches/81_session_creation_util.patch @@ -0,0 +1,77 @@ +Author: Jan Christoph Nordholz +Description: Add lookup code for the creation time of each session. + Requires digging in /proc/$pid and /proc/uptime, though, so it's + definitely no candidate for the Beautiful C contest. + . + Affects screen's behaviour in the following situations: + . + * 'screen -ls' lists available sessions sorted chronologically + * 'screen -RR' now picks the youngest session instead of an + arbitrary one + . + Patch 2/3: new utility functions +Bug-Debian: https://bugs.debian.org/206572 +Forwarded: not-yet + +--- a/extern.h ++++ b/extern.h +@@ -395,6 +395,8 @@ + #else + extern int xsnprintf __P(()); + #endif ++extern time_t SessionCreationTime __P((const char *)); ++extern time_t GetUptime __P((void)); + + + /* acl.c */ +--- a/misc.c ++++ b/misc.c +@@ -30,6 +30,7 @@ + #include + #include /* mkdir() declaration */ + #include ++#include + + #include "config.h" + #include "screen.h" +@@ -720,3 +721,40 @@ + } + + #endif ++ ++time_t SessionCreationTime(const char *fifo) { ++ char ppath[20]; ++ int pfd; ++ char pdata[512]; ++ char *jiffies; ++ ++ int pid = atoi(fifo); ++ if (pid <= 0) return 0; ++ sprintf(ppath, "/proc/%u/stat", pid); ++ pfd = open(ppath, O_RDONLY); ++ if (pfd < 0) return 0; ++ while (1) { ++ int R=0, RR; ++ RR = read(pfd, pdata + R, 512-R); ++ if (RR < 0) {close(pfd); return 0;} ++ else if (RR == 0) break; ++ } ++ close(pfd); ++ ++ for (pfd=21, jiffies=pdata; pfd; --pfd) { ++ jiffies = strchr(jiffies, ' '); ++ if (!jiffies) break; else ++jiffies; ++ } ++ if (!jiffies) return 0; ++ ++ return atol(jiffies) / 100; ++} ++ ++time_t GetUptime(void) { ++ char uptimestr[32]; ++ int fd = open("/proc/uptime", O_RDONLY); ++ if (fd < 0) return 0; ++ (void)read(fd, uptimestr, 32); ++ close(fd); ++ return atol(uptimestr); ++} -- cgit v1.2.3