From 6eebdfd3f310e2823e45cda00b57b5e4f6839692 Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Sun, 25 Jun 2017 13:23:51 +0100 Subject: [PATCH] Bug fix: Additional debug features Ensure grep works on entire message line guint/gint compile problem compile with --disable-debug-log (patch by Guillaume Castagnino) --- src/debug.c | 82 +++++++++++++++++++++++++++++++++------------------ src/debug.h | 17 ++++++++--- src/options.h | 2 +- 3 files changed, 67 insertions(+), 34 deletions(-) diff --git a/src/debug.c b/src/debug.c index aa66f988..f44d9938 100644 --- a/src/debug.c +++ b/src/debug.c @@ -32,16 +32,6 @@ */ static gchar *regexp = NULL; -void set_regexp(gchar *cmd_regexp) -{ - regexp = g_strdup(cmd_regexp); -} - -gchar *get_regexp() -{ - return g_strdup(regexp); -} - static gboolean log_msg_cb(gpointer data) { gchar *buf = data; @@ -58,48 +48,72 @@ static gboolean log_normal_cb(gpointer data) return FALSE; } -void log_domain_printf(const gchar *domain, const gchar *format, ...) +void log_domain_print_message(const gchar *domain, gchar *buf) { - va_list ap; - gchar *buf; + gchar *buf_nl; regex_t regex; gint ret_comp, ret_exec; - gchar *filtered_buf; - va_start(ap, format); - buf = g_strdup_vprintf(format, ap); - va_end(ap); + buf_nl = g_strconcat(buf, "\n", NULL); - if (regexp && command_line && buf) + if (regexp && command_line) { - if (g_strcmp0(buf,"\n")) - { ret_comp = regcomp(®ex, regexp, 0); if (!ret_comp) { - ret_exec = regexec(®ex, buf, 0, NULL, 0); + ret_exec = regexec(®ex, buf_nl, 0, NULL, 0); - filtered_buf = g_strconcat(buf, "\n", NULL); if (!ret_exec) { - print_term(filtered_buf); + print_term(buf_nl); if (strcmp(domain, DOMAIN_INFO) == 0) - g_idle_add(log_normal_cb, filtered_buf); + g_idle_add(log_normal_cb, buf_nl); else - g_idle_add(log_msg_cb, filtered_buf); + g_idle_add(log_msg_cb, buf_nl); } regfree(®ex); } - } } else { - print_term(buf); + print_term(buf_nl); if (strcmp(domain, DOMAIN_INFO) == 0) - g_idle_add(log_normal_cb, buf); + g_idle_add(log_normal_cb, buf_nl); else - g_idle_add(log_msg_cb, buf); + g_idle_add(log_msg_cb, buf_nl); } + g_free(buf); +} + +void log_domain_print_debug(const gchar *domain, const gchar *file_name, + int line_number, const gchar *format, ...) +{ + va_list ap; + gchar *message; + gchar *location; + gchar *buf; + + va_start(ap, format); + message = g_strdup_vprintf(format, ap); + va_end(ap); + + location = g_strdup_printf("%s:%d:", file_name, line_number); + buf = g_strconcat(location, message, NULL); + log_domain_print_message(domain,buf); + g_free(location); + g_free(message); +} + +void log_domain_printf(const gchar *domain, const gchar *format, ...) +{ + va_list ap; + gchar *buf; + + va_start(ap, format); + buf = g_strdup_vprintf(format, ap); + va_end(ap); + + log_domain_print_message(domain, buf); } /* @@ -191,5 +205,15 @@ void init_exec_time(void) get_exec_time(); } +void set_regexp(gchar *cmd_regexp) +{ + regexp = g_strdup(cmd_regexp); +} + +gchar *get_regexp(void) +{ + return g_strdup(regexp); +} + #endif /* DEBUG */ /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff --git a/src/debug.h b/src/debug.h index 46b88d48..d8a34b91 100644 --- a/src/debug.h +++ b/src/debug.h @@ -27,6 +27,8 @@ #define DOMAIN_INFO "info" void log_domain_printf(const gchar *domain, const gchar *format, ...) G_GNUC_PRINTF(2, 3); +void log_domain_print_debug(const gchar *domain, const gchar *file_name, + int line_number, const gchar *format, ...) G_GNUC_PRINTF(4, 5); #define log_printf(...) log_domain_printf(DOMAIN_INFO, __VA_ARGS__) #ifdef DEBUG @@ -35,7 +37,7 @@ void log_domain_printf(const gchar *domain, const gchar *format, ...) G_GNUC_PRI #define DEBUG_LEVEL_MAX 4 void set_regexp(gchar *regexp); -gchar *get_regexp(); +gchar *get_regexp(void); gint get_debug_level(void); void set_debug_level(gint new_level); void debug_level_add(gint delta); @@ -48,14 +50,21 @@ void init_exec_time(void); gint debug_level = get_debug_level(); \ if (debug_level >= (n)) \ { \ - if (debug_level != 1) log_domain_printf(DOMAIN_DEBUG, "%s:%d: ", __FILE__, __LINE__); \ - log_domain_printf(DOMAIN_DEBUG, __VA_ARGS__); \ - log_domain_printf(DOMAIN_DEBUG, "\n"); \ + if (debug_level != 1) \ + { \ + log_domain_print_debug(DOMAIN_DEBUG, __FILE__, __LINE__, __VA_ARGS__); \ + } \ + else \ + { \ + log_domain_printf(DOMAIN_DEBUG, __VA_ARGS__); \ + } \ } \ } while (0) #else /* DEBUG */ +#define get_regexp() (0) +#define set_regexp(regexp) do { } while(0) #define get_debug_level() (0) #define set_debug_level(new_level) do { } while(0) #define debug_level_add(delta) do { } while(0) diff --git a/src/options.h b/src/options.h index 9d8e4ab9..ac996dda 100644 --- a/src/options.h +++ b/src/options.h @@ -54,7 +54,7 @@ struct _ConfOptions gboolean use_saved_window_positions_for_new_windows; gboolean tools_restore_state; - guint log_window_lines; + gint log_window_lines; /* info sidebar component heights */ struct { -- 2.20.1