aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2021-06-19 19:44:58 +0100
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-06-21 16:03:29 +0000
commit759bb234d0eb4d36947213fca2bc14e386c1cc8f (patch)
treeec9ba564273b0d0db43bd1d9691feee79d4a41d1
parentc216bb85e75e3db7050f937d6925ba85fb3e6803 (diff)
wslog: Check if we are initialized and add missing inits
Instead of receiving the program name from GLib, pass it explicitly to ws_log_init() instead and use that to initialize the GLib program name. ws_log_parse_args() will now exit the program when it encounters an argument error if exit_failure >= 0.
-rw-r--r--capinfos.c8
-rw-r--r--captype.c7
-rw-r--r--dftest.c7
-rw-r--r--dumpcap.c10
-rw-r--r--editcap.c7
-rw-r--r--extcap/androiddump.c10
-rw-r--r--extcap/ciscodump.c3
-rw-r--r--extcap/dpauxmon.c3
-rw-r--r--extcap/etwdump.c3
-rw-r--r--extcap/randpktdump.c10
-rw-r--r--extcap/sdjournal.c3
-rw-r--r--extcap/sshdump.c3
-rw-r--r--extcap/udpdump.c3
-rw-r--r--fuzz/fuzzshark.c4
-rw-r--r--mergecap.c7
-rw-r--r--randpkt.c11
-rw-r--r--rawshark.c10
-rw-r--r--reordercap.c7
-rw-r--r--sharkd.c10
-rw-r--r--text2pcap.c4
-rw-r--r--tshark.c10
-rw-r--r--ui/qt/main.cpp10
-rw-r--r--wsutil/wslog.c72
-rw-r--r--wsutil/wslog.h9
24 files changed, 161 insertions, 70 deletions
diff --git a/capinfos.c b/capinfos.c
index c81decd36f..015e0c1e64 100644
--- a/capinfos.c
+++ b/capinfos.c
@@ -84,6 +84,7 @@
#include <wsutil/str_util.h>
#include <wsutil/file_util.h>
#include <wsutil/ws_assert.h>
+#include <wsutil/wslog.h>
#include <wsutil/wsgcrypt.h>
@@ -1580,8 +1581,15 @@ main(int argc, char *argv[])
setlocale(LC_ALL, "");
#endif
+
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("capinfos", NULL);
+
cmdarg_err_init(capinfos_cmdarg_err, capinfos_cmdarg_err_cont);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
+
/* Get the decimal point. */
decimal_point = g_strdup(localeconv()->decimal_point);
diff --git a/captype.c b/captype.c
index 37f81ff443..96edb84443 100644
--- a/captype.c
+++ b/captype.c
@@ -50,6 +50,7 @@
#include <wsutil/report_message.h>
#include <wsutil/str_util.h>
+#include <wsutil/wslog.h>
#include "ui/failure_message.h"
@@ -119,8 +120,14 @@ main(int argc, char *argv[])
setlocale(LC_ALL, "");
#endif
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("captype", NULL);
+
cmdarg_err_init(captype_cmdarg_err, captype_cmdarg_err_cont);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, 1);
+
/* Initialize the version information. */
ws_init_version_info("Captype (Wireshark)", NULL, NULL, NULL);
diff --git a/dftest.c b/dftest.c
index e248b56183..4d497f52e6 100644
--- a/dftest.c
+++ b/dftest.c
@@ -29,6 +29,7 @@
#include <wsutil/filesystem.h>
#include <wsutil/privileges.h>
#include <wsutil/report_message.h>
+#include <wsutil/wslog.h>
#include <wiretap/wtap.h>
@@ -59,8 +60,14 @@ main(int argc, char **argv)
dfilter_t *df;
gchar *err_msg;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("dftest", NULL);
+
cmdarg_err_init(dftest_cmdarg_err, dftest_cmdarg_err_cont);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, 1);
+
/*
* Get credential information for later use.
*/
diff --git a/dumpcap.c b/dumpcap.c
index 539ed003de..c5512aa5b5 100644
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -4851,17 +4851,13 @@ main(int argc, char *argv[])
#endif
GString *str;
- g_set_prgname("dumpcap");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(dumpcap_log_writer);
+ ws_log_init("dumpcap", dumpcap_log_writer);
cmdarg_err_init(dumpcap_cmdarg_err, dumpcap_cmdarg_err_cont);
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- exit(1);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, 1);
#ifdef _WIN32
create_app_running_mutex();
diff --git a/editcap.c b/editcap.c
index 90a39e0b1e..0789323459 100644
--- a/editcap.c
+++ b/editcap.c
@@ -84,6 +84,7 @@
#include <wsutil/pint.h>
#include <wsutil/strtoi.h>
#include <wsutil/ws_assert.h>
+#include <wsutil/wslog.h>
#include <wiretap/wtap_opttypes.h>
#include "ui/failure_message.h"
@@ -1153,8 +1154,14 @@ main(int argc, char *argv[])
gboolean valid_seed = FALSE;
unsigned int seed = 0;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("editcap", NULL);
+
cmdarg_err_init(editcap_cmdarg_err, editcap_cmdarg_err_cont);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
+
#ifdef _WIN32
create_app_running_mutex();
#endif /* _WIN32 */
diff --git a/extcap/androiddump.c b/extcap/androiddump.c
index afd13c1c4a..7cf52e452f 100644
--- a/extcap/androiddump.c
+++ b/extcap/androiddump.c
@@ -2528,17 +2528,13 @@ int main(int argc, char *argv[]) {
char *help_url;
char *help_header = NULL;
- g_set_prgname("androiddump");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(NULL);
+ ws_log_init("androiddump", NULL);
cmdarg_err_init(androiddump_cmdarg_err, androiddump_cmdarg_err);
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- return EXIT_FAILURE;
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, EXIT_FAILURE);
/*
* Get credential information for later use.
diff --git a/extcap/ciscodump.c b/extcap/ciscodump.c
index 80f8cc5418..217fd838d8 100644
--- a/extcap/ciscodump.c
+++ b/extcap/ciscodump.c
@@ -534,6 +534,9 @@ int main(int argc, char *argv[])
char* help_url;
char* help_header = NULL;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("ciscodump", NULL);
+
/*
* Get credential information for later use.
*/
diff --git a/extcap/dpauxmon.c b/extcap/dpauxmon.c
index f3bed612d9..98c6b1319d 100644
--- a/extcap/dpauxmon.c
+++ b/extcap/dpauxmon.c
@@ -489,6 +489,9 @@ int main(int argc, char *argv[])
extcap_parameters* extcap_conf = g_new0(extcap_parameters, 1);
char* help_header = NULL;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("dpauxmon", NULL);
+
/*
* Get credential information for later use.
*/
diff --git a/extcap/etwdump.c b/extcap/etwdump.c
index bc8fb3b04e..9d6d8fa7ae 100644
--- a/extcap/etwdump.c
+++ b/extcap/etwdump.c
@@ -122,6 +122,9 @@ int main(int argc, char* argv[])
char* help_url;
char* help_header = NULL;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("etwdump", NULL);
+
/*
* Get credential information for later use.
*/
diff --git a/extcap/randpktdump.c b/extcap/randpktdump.c
index 1b7e3dec1b..f1f18cd19e 100644
--- a/extcap/randpktdump.c
+++ b/extcap/randpktdump.c
@@ -151,17 +151,13 @@ int main(int argc, char *argv[])
char* help_url;
char* help_header = NULL;
- g_set_prgname("randpktdump");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(NULL);
+ ws_log_init("randpktdump", NULL);
cmdarg_err_init(randpktdump_cmdarg_err, randpktdump_cmdarg_err);
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- return EXIT_FAILURE;
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, EXIT_FAILURE);
/*
* Get credential information for later use.
diff --git a/extcap/sdjournal.c b/extcap/sdjournal.c
index 1e1629cb12..71b163b470 100644
--- a/extcap/sdjournal.c
+++ b/extcap/sdjournal.c
@@ -341,6 +341,9 @@ int main(int argc, char **argv)
char* help_url;
char* help_header = NULL;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("sdjournal", NULL);
+
/*
* Get credential information for later use.
*/
diff --git a/extcap/sshdump.c b/extcap/sshdump.c
index ae202fb22f..80bab13f79 100644
--- a/extcap/sshdump.c
+++ b/extcap/sshdump.c
@@ -362,6 +362,9 @@ int main(int argc, char *argv[])
gboolean noprom = FALSE;
gchar* interface_description = g_strdup("SSH remote capture");
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("sshdump", NULL);
+
sshdump_extcap_interface = g_path_get_basename(argv[0]);
/*
diff --git a/extcap/udpdump.c b/extcap/udpdump.c
index ba606dda5c..44361e17c5 100644
--- a/extcap/udpdump.c
+++ b/extcap/udpdump.c
@@ -368,6 +368,9 @@ int main(int argc, char *argv[])
char* payload = NULL;
char* port_msg = NULL;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("udpdump", NULL);
+
/*
* Get credential information for later use.
*/
diff --git a/fuzz/fuzzshark.c b/fuzz/fuzzshark.c
index 17dcb8315e..c2bed25c2d 100644
--- a/fuzz/fuzzshark.c
+++ b/fuzz/fuzzshark.c
@@ -25,6 +25,7 @@
#include <wsutil/filesystem.h>
#include <wsutil/privileges.h>
#include <wsutil/report_message.h>
+#include <wsutil/wslog.h>
#include <version_info.h>
#include <wiretap/wtap.h>
@@ -234,6 +235,9 @@ fuzz_init(int argc _U_, char **argv)
g_setenv("WIRESHARK_DEBUG_WMEM_OVERRIDE", "simple", 0);
g_setenv("G_SLICE", "always-malloc", 0);
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("fuzzshark", NULL);
+
cmdarg_err_init(fuzzshark_cmdarg_err, fuzzshark_cmdarg_err_cont);
/*
diff --git a/mergecap.c b/mergecap.c
index cee3834d69..5c670a2f00 100644
--- a/mergecap.c
+++ b/mergecap.c
@@ -42,6 +42,7 @@
#include <wsutil/privileges.h>
#include <wsutil/strnatcmp.h>
#include <wsutil/ws_assert.h>
+#include <wsutil/wslog.h>
#include <cli_main.h>
#include <version_info.h>
@@ -227,8 +228,14 @@ main(int argc, char *argv[])
idb_merge_mode mode = IDB_MERGE_MODE_MAX;
merge_progress_callback_t cb;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("mergecap", NULL);
+
cmdarg_err_init(mergecap_cmdarg_err, mergecap_cmdarg_err_cont);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, 1);
+
#ifdef _WIN32
create_app_running_mutex();
#endif /* _WIN32 */
diff --git a/randpkt.c b/randpkt.c
index 8a85717bc5..700303ee65 100644
--- a/randpkt.c
+++ b/randpkt.c
@@ -29,6 +29,7 @@
#endif
#include <wsutil/report_message.h>
+#include <wsutil/wslog.h>
/*
* If we have getopt_long() in the system library, include <getopt.h>.
@@ -137,6 +138,14 @@ main(int argc, char *argv[])
{0, 0, 0, 0 }
};
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("randpkt", NULL);
+
+ cmdarg_err_init(randpkt_cmdarg_err, randpkt_cmdarg_err_cont);
+
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
+
/*
* Get credential information for later use.
*/
@@ -158,8 +167,6 @@ main(int argc, char *argv[])
wtap_init(TRUE);
- cmdarg_err_init(randpkt_cmdarg_err, randpkt_cmdarg_err_cont);
-
#ifdef _WIN32
create_app_running_mutex();
#endif /* _WIN32 */
diff --git a/rawshark.c b/rawshark.c
index 471a89375c..1001930ddf 100644
--- a/rawshark.c
+++ b/rawshark.c
@@ -449,17 +449,13 @@ main(int argc, char *argv[])
setlocale(LC_ALL, "");
#endif
- g_set_prgname("rawshark");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(NULL);
+ ws_log_init("rawshark", NULL);
cmdarg_err_init(rawshark_cmdarg_err, rawshark_cmdarg_err_cont);
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- return INVALID_OPTION;
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
/* Initialize the version information. */
ws_init_version_info("Rawshark (Wireshark)", NULL,
diff --git a/reordercap.c b/reordercap.c
index b79c3d61c8..27f7c5350d 100644
--- a/reordercap.c
+++ b/reordercap.c
@@ -44,6 +44,7 @@
#endif
#include <wsutil/report_message.h>
+#include <wsutil/wslog.h>
#include "ui/failure_message.h"
@@ -207,8 +208,14 @@ main(int argc, char *argv[])
char *infile;
const char *outfile;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("reordercap", NULL);
+
cmdarg_err_init(reordercap_cmdarg_err, reordercap_cmdarg_err_cont);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
+
/* Initialize the version information. */
ws_init_version_info("Reordercap (Wireshark)", NULL, NULL, NULL);
diff --git a/sharkd.c b/sharkd.c
index e325fda958..f148ca35b1 100644
--- a/sharkd.c
+++ b/sharkd.c
@@ -114,17 +114,13 @@ main(int argc, char *argv[])
cfile_close_failure_message
};
- g_set_prgname("sharkd");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(NULL);
+ ws_log_init("sharkd", NULL);
cmdarg_err_init(sharkd_cmdarg_err, sharkd_cmdarg_err_cont);
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- return INIT_FAILED;
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INIT_FAILED);
/*
* Get credential information for later use, and drop privileges
diff --git a/text2pcap.c b/text2pcap.c
index 331ce16203..6c7cbc70b5 100644
--- a/text2pcap.c
+++ b/text2pcap.c
@@ -103,6 +103,7 @@
#include <cli_main.h>
#include <version_info.h>
#include <wsutil/inet_addr.h>
+#include <wsutil/wslog.h>
#ifdef _WIN32
#include <io.h> /* for _setmode */
@@ -1864,6 +1865,9 @@ main(int argc, char *argv[])
{
int ret = EXIT_SUCCESS;
+ /* Initialize log handler early so we can have proper logging during startup. */
+ ws_log_init("text2pcap", NULL);
+
#ifdef _WIN32
create_app_running_mutex();
#endif /* _WIN32 */
diff --git a/tshark.c b/tshark.c
index 5d72405acd..74efc61730 100644
--- a/tshark.c
+++ b/tshark.c
@@ -775,17 +775,13 @@ main(int argc, char *argv[])
setlocale(LC_ALL, "");
#endif
- g_set_prgname("tshark");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(NULL);
+ ws_log_init("tshark", NULL);
cmdarg_err_init(tshark_cmdarg_err, tshark_cmdarg_err_cont);
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- return INVALID_OPTION;
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
ws_debug("tshark started with %d args", argc);
diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp
index 588e078d44..24290e9b03 100644
--- a/ui/qt/main.cpp
+++ b/ui/qt/main.cpp
@@ -529,10 +529,8 @@ int main(int argc, char *qt_argv[])
macos_enable_layer_backing();
#endif
- g_set_prgname("wireshark");
-
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init(console_log_writer);
+ ws_log_init("wireshark", console_log_writer);
qInstallMessageHandler(qt_log_message_handler);
@@ -582,10 +580,8 @@ int main(int argc, char *qt_argv[])
create_app_running_mutex();
#endif /* _WIN32 */
- /* Command line options are parsed too late to configure logging, do it
- manually. */
- if (ws_log_parse_args(&argc, argv, cmdarg_err) != 0)
- exit_application(INVALID_OPTION);
+ /* Early logging command-line initialization. */
+ ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION);
/*
* Get credential information for later use, and drop privileges
diff --git a/wsutil/wslog.c b/wsutil/wslog.c
index f4d8505fd3..45227abbae 100644
--- a/wsutil/wslog.c
+++ b/wsutil/wslog.c
@@ -46,7 +46,7 @@
#define DEFAULT_LOG_LEVEL LOG_LEVEL_MESSAGE
-#define DEFAULT_APPNAME "PID"
+#define DEFAULT_PROGNAME "PID"
#define DOMAIN_UNDEFED(domain) ((domain) == NULL || *(domain) == '\0')
#define DOMAIN_DEFINED(domain) (!DOMAIN_UNDEFED(domain))
@@ -66,7 +66,7 @@ static enum ws_log_level current_log_level = LOG_LEVEL_NONE;
static gboolean color_enabled = FALSE;
-static const char *registered_appname = NULL;
+static const char *registered_progname = DEFAULT_PROGNAME;
/* List of domains to filter. */
static log_filter_t *domain_filter = NULL;
@@ -87,6 +87,10 @@ static FILE *custom_log = NULL;
static enum ws_log_level fatal_log_level = LOG_LEVEL_ERROR;
+#ifndef WS_DISABLE_DEBUG
+static gboolean init_complete = FALSE;
+#endif
+
static void ws_log_cleanup(void);
@@ -277,7 +281,26 @@ static const char *opt_debug = "--log-debug";
static const char *opt_noisy = "--log-noisy";
-int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char *, ...))
+static void print_err(void (*log_args_print_err)(const char *, va_list ap),
+ int log_args_exit_failure,
+ const char *fmt, ...)
+{
+ va_list ap;
+
+ if (log_args_print_err == NULL)
+ return;
+
+ va_start(ap, fmt);
+ log_args_print_err(fmt, ap);
+ va_end(ap);
+ if (log_args_exit_failure >= 0)
+ exit(log_args_exit_failure);
+}
+
+
+int ws_log_parse_args(int *argc_ptr, char *argv[],
+ void (*vcmdarg_err)(const char *, va_list ap),
+ int exit_failure)
{
char **ptr = argv;
int count = *argc_ptr;
@@ -331,7 +354,8 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char
if (value == NULL || !*value || *value == '-') {
/* If the option value after the blank starts with '-' assume
* it is another option. */
- print_err("Option \"%s\" requires a value.\n", *ptr);
+ print_err(vcmdarg_err, exit_failure,
+ "Option \"%s\" requires a value.\n", *ptr);
option = NULL;
prune_extra = 0;
ret += 1;
@@ -351,7 +375,8 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char
if (option == opt_level) {
if (ws_log_set_level_str(value) == LOG_LEVEL_NONE) {
- print_err("Invalid log level \"%s\"\n", value);
+ print_err(vcmdarg_err, exit_failure,
+ "Invalid log level \"%s\".\n", value);
ret += 1;
}
}
@@ -361,7 +386,9 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char
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));
+ print_err(vcmdarg_err, exit_failure,
+ "Error opening file '%s' for writing: %s.\n",
+ value, g_strerror(errno));
ret += 1;
}
else {
@@ -370,8 +397,9 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char
}
else if (option == opt_fatal) {
if (ws_log_set_fatal_str(value) == LOG_LEVEL_NONE) {
- print_err("Fatal log level must be \"critical\" or \"warning\", "
- "not \"%s\".\n", value);
+ print_err(vcmdarg_err, exit_failure,
+ "Fatal log level must be \"critical\" or "
+ "\"warning\", not \"%s\".\n", value);
ret += 1;
}
}
@@ -498,13 +526,14 @@ enum ws_log_level ws_log_set_fatal_str(const char *str_level)
}
-void ws_log_init(ws_log_writer_cb *writer)
+void ws_log_init(const char *progname, ws_log_writer_cb *writer)
{
const char *env;
- registered_appname = g_get_prgname();
- if (registered_appname == NULL)
- registered_appname = DEFAULT_APPNAME;
+ if (progname != NULL) {
+ registered_progname = progname;
+ g_set_prgname(progname);
+ }
if (writer)
registered_log_writer = writer;
@@ -543,15 +572,20 @@ void ws_log_init(ws_log_writer_cb *writer)
ws_log_set_noisy_filter(env);
atexit(ws_log_cleanup);
+
+#ifndef WS_DISABLE_DEBUG
+ init_complete = TRUE;
+#endif
}
-void ws_log_init_with_data(ws_log_writer_cb *writer, void *user_data,
- ws_log_writer_free_data_cb *free_user_data)
+void ws_log_init_with_data(const char *progname, ws_log_writer_cb *writer,
+ void *user_data,
+ ws_log_writer_free_data_cb *free_user_data)
{
registered_log_writer_data = user_data;
registered_log_writer_data_free = free_user_data;
- ws_log_init(writer);
+ ws_log_init(progname, writer);
}
@@ -574,8 +608,14 @@ static void log_write_do_work(FILE *fp, gboolean use_color, const char *timestam
const char *level_str = ws_log_level_to_string(level);
gboolean doextra = (level != DEFAULT_LOG_LEVEL);
+#ifndef WS_DISABLE_DEBUG
+ if (!init_complete) {
+ fprintf(fp, " ** (noinit)");
+ }
+#endif
+
if (doextra)
- fprintf(fp, " ** (%s:%ld) ", registered_appname, (long)getpid());
+ fprintf(fp, " ** (%s:%ld) ", registered_progname, (long)getpid());
else
fputs(" ** ", fp);
diff --git a/wsutil/wslog.h b/wsutil/wslog.h
index 42a5869c4c..ee53964028 100644
--- a/wsutil/wslog.h
+++ b/wsutil/wslog.h
@@ -132,7 +132,9 @@ enum ws_log_level ws_log_set_fatal_str(const char *str_level);
* Returns zero for no error, non-zero for a bad option value.
*/
WS_DLL_PUBLIC
-int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char *, ...));
+int ws_log_parse_args(int *argc_ptr, char *argv[],
+ void (*vcmdarg_err)(const char *, va_list ap),
+ int exit_failure);
/** Initializes the logging code.
@@ -142,7 +144,7 @@ int ws_log_parse_args(int *argc_ptr, char *argv[], void (*print_err)(const char
* is NULL the default log writer is used.
*/
WS_DLL_PUBLIC
-void ws_log_init(ws_log_writer_cb *writer);
+void ws_log_init(const char *progname, ws_log_writer_cb *writer);
/** Initializes the logging code.
@@ -152,7 +154,8 @@ void ws_log_init(ws_log_writer_cb *writer);
* is passed it will be called with user_data when the program terminates.
*/
WS_DLL_PUBLIC
-void ws_log_init_with_data(ws_log_writer_cb *writer, void *user_data,
+void ws_log_init_with_data(const char *progname, ws_log_writer_cb *writer,
+ void *user_data,
ws_log_writer_free_data_cb *free_user_data);