From b91801a87084e5c0b45c4698fddb979fd9f2ec3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Valverde?= Date: Mon, 14 Jun 2021 18:41:34 +0100 Subject: [PATCH] wslog: Add a --log-file cmd line option --- wsutil/wslog.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/wsutil/wslog.c b/wsutil/wslog.c index 3610a3275e..9968f9b67e 100644 --- a/wsutil/wslog.c +++ b/wsutil/wslog.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #ifdef HAVE_UNISTD_H @@ -20,6 +21,7 @@ #include #include +#include #define PREFIX_BUFSIZE 128 @@ -155,6 +157,7 @@ enum ws_log_level ws_log_set_level_str(const char *str_level) static const char *opt_level = "--log-level"; static const char *opt_domains = "--log-domains"; +static const char *opt_file = "--log-file"; int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char *, ...)) @@ -175,6 +178,10 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char option = opt_domains; optlen = strlen(opt_domains); } + else if (g_str_has_prefix(*ptr, opt_file)) { + option = opt_file; + optlen = strlen(opt_file); + } else { ptr += 1; count -= 1; @@ -219,6 +226,16 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char else if (option == opt_domains) { ws_log_set_domain_filter_str(value); } + else if (option == opt_file) { + FILE *fp = ws_fopen(value, "w"); + if (fp == NULL) { + print_err("Error opening file '%s' for writing: %s\n", value, g_strerror(errno)); + ret += 1; + } + else { + ws_log_add_custom_file(fp); + } + } /* * We found a log option. We will remove it from @@ -493,9 +510,6 @@ void ws_log_add_custom_file(FILE *fp) { if (custom_log != NULL) { fclose(custom_log); - custom_log = NULL; - } - if (fp != NULL) { - custom_log = fp; } + custom_log = fp; }