Diff between 14883d64dde384fc0d671d33c058fbdb3aa8bb11 and 9cb91579643c106f08b1e862fcd6ffdb56bc4041

Changed Files

File Additions Deletions Status
Makefile.tools +1 -1 modified
monitor/control.c +3 -3 modified
monitor/display.c +33 -8 renamed
monitor/display.h +5 -3 renamed
monitor/packet.c +1 -11 modified

Full Patch

diff --git a/Makefile.tools b/Makefile.tools
index 07eeeac..a2c9d9e 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -47,8 +47,8 @@ tools_btmgmt_SOURCES = tools/btmgmt.c src/glib-helper.c src/eir.c
 tools_btmgmt_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@
 
 monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \
-					monitor/pager.h monitor/pager.c \
 					monitor/mainloop.h monitor/mainloop.c \
+					monitor/display.h monitor/display.c \
 					monitor/hcidump.h monitor/hcidump.c \
 					monitor/btsnoop.h monitor/btsnoop.c \
 					monitor/control.h monitor/control.c \
diff --git a/monitor/control.c b/monitor/control.c
index 638d173..95582a4 100644
--- a/monitor/control.c
+++ b/monitor/control.c
@@ -40,7 +40,7 @@
 #include <bluetooth/mgmt.h>
 
 #include "mainloop.h"
-#include "pager.h"
+#include "display.h"
 #include "packet.h"
 #include "btsnoop.h"
 #include "control.h"
@@ -779,7 +779,7 @@ void control_reader(const char *path)
 	if (btsnoop_open(path) < 0)
 		return;
 
-	pager_open();
+	open_pager();
 
 	while (1) {
 		if (btsnoop_read(&tv, &index, &opcode, buf, &pktlen) < 0)
@@ -788,7 +788,7 @@ void control_reader(const char *path)
 		packet_monitor(&tv, index, opcode, buf, pktlen);
 	}
 
-	pager_close();
+	close_pager();
 
 	btsnoop_close();
 }
diff --git a/monitor/pager.c b/monitor/display.c
similarity index 88%
rename from monitor/pager.c
rename to monitor/display.c
index f24eca7..7b6fc98 100644
--- a/monitor/pager.c
+++ b/monitor/display.c
@@ -34,11 +34,39 @@
 #include <signal.h>
 #include <sys/wait.h>
 #include <sys/prctl.h>
+#include <sys/ioctl.h>
 
-#include "pager.h"
+#include "display.h"
 
 static pid_t pager_pid = 0;
 
+bool use_color(void)
+{
+	static int cached_use_color = -1;
+
+	if (__builtin_expect(!!(cached_use_color < 0), 0))
+		cached_use_color = isatty(STDOUT_FILENO) > 0 || pager_pid > 0;
+
+	return cached_use_color;
+}
+
+int num_columns(void)
+{
+	static int cached_num_columns = -1;
+
+	if (__builtin_expect(!!(cached_num_columns < 0), 0)) {
+		struct winsize ws;
+
+		if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) < 0)
+			return -1;
+
+		if (ws.ws_col > 0)
+			cached_num_columns = ws.ws_col;
+	}
+
+	return cached_num_columns;
+}
+
 static void close_pipe(int p[])
 {
 	if (p[0] >= 0)
@@ -64,7 +92,7 @@ static void wait_for_terminate(pid_t pid)
 	}
 }
 
-void pager_open(void)
+void open_pager(void)
 {
 	const char *pager;
 	pid_t parent_pid;
@@ -82,6 +110,8 @@ void pager_open(void)
 	if (!(isatty(STDOUT_FILENO) > 0))
 		return;
 
+	num_columns();
+
 	if (pipe(fd) < 0) {
 		perror("Failed to create pager pipe");
 		return;
@@ -128,7 +158,7 @@ void pager_open(void)
 	close_pipe(fd);
 }
 
-void pager_close(void)
+void close_pager(void)
 {
 	if (pager_pid <= 0)
 		return;
@@ -138,8 +168,3 @@ void pager_close(void)
 	wait_for_terminate(pager_pid);
 	pager_pid = 0;
 }
-
-bool pager_have(void)
-{
-	return pager_pid > 0;
-}
diff --git a/monitor/pager.h b/monitor/display.h
similarity index 87%
rename from monitor/pager.h
rename to monitor/display.h
index 041eb74..2740f76 100644
--- a/monitor/pager.h
+++ b/monitor/display.h
@@ -24,6 +24,8 @@
 
 #include <stdbool.h>
 
-void pager_open(void);
-void pager_close(void);
-bool pager_have(void);
+bool use_color(void);
+int num_columns(void);
+
+void open_pager(void);
+void close_pager(void);
diff --git a/monitor/packet.c b/monitor/packet.c
index fd9e663..8daa153 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -40,7 +40,7 @@
 #include <bluetooth/hci.h>
 #include <bluetooth/hci_lib.h>
 
-#include "pager.h"
+#include "display.h"
 #include "bt.h"
 #include "l2cap.h"
 #include "control.h"
@@ -75,16 +75,6 @@
 #define COLOR_HCI_ACLDATA		COLOR_CYAN
 #define COLOR_HCI_SCODATA		COLOR_YELLOW
 
-static bool use_color(void)
-{
-	static int cached_use_color = -1;
-
-	if (__builtin_expect(!!(cached_use_color < 0), 0))
-		cached_use_color = isatty(STDOUT_FILENO) > 0 || pager_have();
-
-	return cached_use_color;
-}
-
 #define print_text(color, fmt, args...) do { \
 	printf("%s" fmt "%s", \
 		use_color() ? color : "", ## args, \