summaryrefslogtreecommitdiffstats
path: root/tools/idevicesyslog.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/idevicesyslog.c')
-rw-r--r--tools/idevicesyslog.c92
1 files changed, 12 insertions, 80 deletions
diff --git a/tools/idevicesyslog.c b/tools/idevicesyslog.c
index d9b627f..4eb1605 100644
--- a/tools/idevicesyslog.c
+++ b/tools/idevicesyslog.c
@@ -41,10 +41,10 @@
41 41
42#include <libimobiledevice/libimobiledevice.h> 42#include <libimobiledevice/libimobiledevice.h>
43#include <libimobiledevice/syslog_relay.h> 43#include <libimobiledevice/syslog_relay.h>
44#include <libimobiledevice-glue/termcolors.h>
44 45
45static int quit_flag = 0; 46static int quit_flag = 0;
46static int exit_on_disconnect = 0; 47static int exit_on_disconnect = 0;
47static int use_colors = 0;
48static int show_device_name = 0; 48static int show_device_name = 0;
49 49
50static char* udid = NULL; 50static char* udid = NULL;
@@ -75,58 +75,6 @@ static char *line = NULL;
75static int line_buffer_size = 0; 75static int line_buffer_size = 0;
76static int lp = 0; 76static int lp = 0;
77 77
78#ifdef WIN32
79static WORD COLOR_RESET = 0;
80static HANDLE h_stdout = INVALID_HANDLE_VALUE;
81
82#define COLOR_NORMAL COLOR_RESET
83#define COLOR_DARK FOREGROUND_INTENSITY
84#define COLOR_RED FOREGROUND_RED |FOREGROUND_INTENSITY
85#define COLOR_DARK_RED FOREGROUND_RED
86#define COLOR_GREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
87#define COLOR_DARK_GREEN FOREGROUND_GREEN
88#define COLOR_YELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
89#define COLOR_DARK_YELLOW FOREGROUND_GREEN | FOREGROUND_RED
90#define COLOR_BLUE FOREGROUND_BLUE | FOREGROUND_INTENSITY
91#define COLOR_DARK_BLUE FOREGROUND_BLUE
92#define COLOR_MAGENTA FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY
93#define COLOR_DARK_MAGENTA FOREGROUND_BLUE | FOREGROUND_RED
94#define COLOR_CYAN FOREGROUND_BLUE | FOREGROUND_GREEN
95#define COLOR_BRIGHT_CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
96#define COLOR_DARK_CYAN FOREGROUND_BLUE | FOREGROUND_GREEN
97#define COLOR_WHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
98#define COLOR_DARK_WHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
99
100static void TEXT_COLOR(WORD attr)
101{
102 if (use_colors) {
103 SetConsoleTextAttribute(h_stdout, attr);
104 }
105}
106#else
107
108#define COLOR_RESET "\e[m"
109#define COLOR_NORMAL "\e[0m"
110#define COLOR_DARK "\e[2m"
111#define COLOR_RED "\e[0;31m"
112#define COLOR_DARK_RED "\e[2;31m"
113#define COLOR_GREEN "\e[0;32m"
114#define COLOR_DARK_GREEN "\e[2;32m"
115#define COLOR_YELLOW "\e[0;33m"
116#define COLOR_DARK_YELLOW "\e[2;33m"
117#define COLOR_BLUE "\e[0;34m"
118#define COLOR_DARK_BLUE "\e[2;34m"
119#define COLOR_MAGENTA "\e[0;35m"
120#define COLOR_DARK_MAGENTA "\e[2;35m"
121#define COLOR_CYAN "\e[0;36m"
122#define COLOR_BRIGHT_CYAN "\e[1;36m"
123#define COLOR_DARK_CYAN "\e[2;36m"
124#define COLOR_WHITE "\e[1;37m"
125#define COLOR_DARK_WHITE "\e[0;37m"
126
127#define TEXT_COLOR(x) if (use_colors) { fwrite(x, 1, sizeof(x)-1, stdout); }
128#endif
129
130static void add_filter(const char* filterstr) 78static void add_filter(const char* filterstr)
131{ 79{
132 int filter_len = strlen(filterstr); 80 int filter_len = strlen(filterstr);
@@ -201,7 +149,7 @@ static void syslog_callback(char c, void *user_data)
201 do { 149 do {
202 if (lp < 16) { 150 if (lp < 16) {
203 shall_print = 1; 151 shall_print = 1;
204 TEXT_COLOR(COLOR_WHITE); 152 cprintf(COLOR_WHITE);
205 break; 153 break;
206 } else if (line[3] == ' ' && line[6] == ' ' && line[15] == ' ') { 154 } else if (line[3] == ' ' && line[6] == ' ' && line[15] == ' ') {
207 char* end = &line[lp]; 155 char* end = &line[lp];
@@ -331,11 +279,7 @@ static void syslog_callback(char c, void *user_data)
331 /* log level */ 279 /* log level */
332 char* level_start = p; 280 char* level_start = p;
333 char* level_end = p; 281 char* level_end = p;
334#ifdef WIN32
335 WORD level_color = COLOR_NORMAL;
336#else
337 const char* level_color = NULL; 282 const char* level_color = NULL;
338#endif
339 if (!strncmp(p, "<Notice>:", 9)) { 283 if (!strncmp(p, "<Notice>:", 9)) {
340 level_end += 9; 284 level_end += 9;
341 level_color = COLOR_GREEN; 285 level_color = COLOR_GREEN;
@@ -353,24 +297,24 @@ static void syslog_callback(char c, void *user_data)
353 } 297 }
354 298
355 /* write date and time */ 299 /* write date and time */
356 TEXT_COLOR(COLOR_DARK_WHITE); 300 cprintf(COLOR_LIGHT_GRAY);
357 fwrite(line, 1, 16, stdout); 301 fwrite(line, 1, 16, stdout);
358 302
359 if (show_device_name) { 303 if (show_device_name) {
360 /* write device name */ 304 /* write device name */
361 TEXT_COLOR(COLOR_DARK_YELLOW); 305 cprintf(COLOR_DARK_YELLOW);
362 fwrite(device_name_start, 1, device_name_end-device_name_start+1, stdout); 306 fwrite(device_name_start, 1, device_name_end-device_name_start+1, stdout);
363 TEXT_COLOR(COLOR_RESET); 307 cprintf(COLOR_RESET);
364 } 308 }
365 309
366 /* write process name */ 310 /* write process name */
367 TEXT_COLOR(COLOR_BRIGHT_CYAN); 311 cprintf(COLOR_BRIGHT_CYAN);
368 fwrite(process_name_start, 1, process_name_end-process_name_start, stdout); 312 fwrite(process_name_start, 1, process_name_end-process_name_start, stdout);
369 TEXT_COLOR(COLOR_CYAN); 313 cprintf(COLOR_CYAN);
370 fwrite(process_name_end, 1, proc_name_end-process_name_end+1, stdout); 314 fwrite(process_name_end, 1, proc_name_end-process_name_end+1, stdout);
371 315
372 /* write log level */ 316 /* write log level */
373 TEXT_COLOR(level_color); 317 cprintf(level_color);
374 if (level_end > level_start) { 318 if (level_end > level_start) {
375 fwrite(level_start, 1, level_end-level_start, stdout); 319 fwrite(level_start, 1, level_end-level_start, stdout);
376 p = level_end; 320 p = level_end;
@@ -379,17 +323,17 @@ static void syslog_callback(char c, void *user_data)
379 lp -= p - linep; 323 lp -= p - linep;
380 linep = p; 324 linep = p;
381 325
382 TEXT_COLOR(COLOR_WHITE); 326 cprintf(COLOR_WHITE);
383 327
384 } else { 328 } else {
385 shall_print = 1; 329 shall_print = 1;
386 TEXT_COLOR(COLOR_WHITE); 330 cprintf(COLOR_WHITE);
387 } 331 }
388 } while (0); 332 } while (0);
389 333
390 if ((num_msg_filters == 0 && num_proc_filters == 0 && num_pid_filters == 0 && num_trigger_filters == 0 && num_untrigger_filters == 0) || shall_print) { 334 if ((num_msg_filters == 0 && num_proc_filters == 0 && num_pid_filters == 0 && num_trigger_filters == 0 && num_untrigger_filters == 0) || shall_print) {
391 fwrite(linep, 1, lp, stdout); 335 fwrite(linep, 1, lp, stdout);
392 TEXT_COLOR(COLOR_RESET); 336 cprintf(COLOR_RESET);
393 fflush(stdout); 337 fflush(stdout);
394 if (trigger_off) { 338 if (trigger_off) {
395 triggered = 0; 339 triggered = 0;
@@ -560,14 +504,6 @@ static void print_usage(int argc, char **argv, int is_error)
560 504
561int main(int argc, char *argv[]) 505int main(int argc, char *argv[])
562{ 506{
563#ifdef WIN32
564 CONSOLE_SCREEN_BUFFER_INFO csbi;
565 h_stdout = GetStdHandle(STD_OUTPUT_HANDLE);
566 if (GetConsoleScreenBufferInfo(h_stdout, &csbi)) {
567 COLOR_RESET = csbi.wAttributes;
568 }
569#endif
570 int no_colors = 0;
571 int include_filter = 0; 507 int include_filter = 0;
572 int exclude_filter = 0; 508 int exclude_filter = 0;
573 int include_kernel = 0; 509 int include_kernel = 0;
@@ -700,7 +636,7 @@ int main(int argc, char *argv[])
700 return 0; 636 return 0;
701 } 637 }
702 case 2: 638 case 2:
703 no_colors = 1; 639 term_colors_set_enabled(0);
704 break; 640 break;
705 case 'v': 641 case 'v':
706 printf("%s %s\n", TOOL_NAME, PACKAGE_VERSION); 642 printf("%s %s\n", TOOL_NAME, PACKAGE_VERSION);
@@ -756,10 +692,6 @@ int main(int argc, char *argv[])
756 argc -= optind; 692 argc -= optind;
757 argv += optind; 693 argv += optind;
758 694
759 if (!no_colors && isatty(1)) {
760 use_colors = 1;
761 }
762
763 int num = 0; 695 int num = 0;
764 idevice_info_t *devices = NULL; 696 idevice_info_t *devices = NULL;
765 idevice_get_device_list_extended(&devices, &num); 697 idevice_get_device_list_extended(&devices, &num);