summaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-11-04 10:16:30 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-11-04 10:16:30 +0100
commit9cb91579643c106f08b1e862fcd6ffdb56bc4041 (patch)
treeacc1662e2a96c12d9e91bb3a206ab9b86d894713 /monitor
parent14883d64dde384fc0d671d33c058fbdb3aa8bb11 (diff)
downloadbluez-9cb91579643c106f08b1e862fcd6ffdb56bc4041.tar.gz
monitor: Use global file for display settings
Diffstat (limited to 'monitor')
-rw-r--r--monitor/control.c6
-rw-r--r--monitor/display.c (renamed from monitor/pager.c)41
-rw-r--r--monitor/display.h (renamed from monitor/pager.h)8
-rw-r--r--monitor/packet.c12
4 files changed, 42 insertions, 25 deletions
diff --git a/monitor/control.c b/monitor/control.c
index 638d1733e..95582a4c4 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
index f24eca7af..7b6fc98ef 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
index 041eb74dd..2740f7699 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 fd9e66372..8daa15309 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, \