[systemd-commits] src/journal src/shared
Dave Reisner
dreisner at kemper.freedesktop.org
Mon Sep 24 05:39:50 PDT 2012
src/journal/journalctl.c | 2 ++
src/shared/util.c | 8 +++++++-
src/shared/util.h | 1 +
3 files changed, 10 insertions(+), 1 deletion(-)
New commits:
commit 585314e84c1a2e8941309874088963985e063213
Author: Dave Reisner <dreisner at archlinux.org>
Date: Sat Sep 22 12:50:27 2012 -0400
journalctl: reset cached column count on SIGWINCH
This requires a little bit of tip-toeing around to explicitly avoid
touching the environment from a sig handler. Instead, simply create a
function to reset the var to its "unset" state, allowing the next call
to columns() to recalculate and cache the new value.
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 6b580d4..e491c27 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -29,6 +29,7 @@
#include <sys/poll.h>
#include <time.h>
#include <getopt.h>
+#include <signal.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
@@ -175,6 +176,7 @@ static int parse_argv(int argc, char *argv[]) {
case 'f':
arg_follow = true;
+ signal(SIGWINCH, columns_cache_reset);
break;
case 'o':
diff --git a/src/shared/util.c b/src/shared/util.c
index 97f766c..e015686 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -70,6 +70,7 @@
int saved_argc = 0;
char **saved_argv = NULL;
+int parsed_columns = 0;
size_t page_size(void) {
static __thread size_t pgsz = 0;
@@ -3740,7 +3741,7 @@ int fd_columns(int fd) {
}
static unsigned columns_cached(bool cached) {
- static __thread int parsed_columns = 0, env_columns = -1;
+ static __thread int env_columns = -1;
const char *e;
if (_likely_(parsed_columns > 0 && cached))
@@ -3776,6 +3777,11 @@ unsigned columns_uncached(void) {
return columns_cached(false);
}
+/* intended to be used as a SIGWINCH sighandler */
+void columns_cache_reset(int signum) {
+ parsed_columns = 0;
+}
+
int fd_lines(int fd) {
struct winsize ws;
zero(ws);
diff --git a/src/shared/util.h b/src/shared/util.h
index e1d4735..61b88a8 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -385,6 +385,7 @@ int status_welcome(void);
int fd_columns(int fd);
unsigned columns(void);
unsigned columns_uncached(void);
+void columns_cache_reset(int _unused_ signum);
int fd_lines(int fd);
unsigned lines(void);
More information about the systemd-commits
mailing list