Add more error-reporting routines that call through a function pointer.

Have routines to report capture-file errors, using libwireshark error
codes and strings, that call through a pointer, so they can pop up
dialogs in GUI apps, print a message to the standard error on
command-line apps, and possibly do something different on server
programs.

Have init_report_message() take a pointer to structure containing those
function pointers, rather than the function pointers themselves, as
arguments.

Make other API changes to make that work.
This commit is contained in:
Guy Harris 2021-03-15 11:29:43 -07:00
parent 89ae76d300
commit c33e2f7b51
23 changed files with 521 additions and 421 deletions

View File

@ -1193,7 +1193,7 @@ process_cap_file(const char *filename, gboolean need_separator)
cf_info.wth = wtap_open_offline(filename, WTAP_TYPE_AUTO, &err, &err_info, FALSE); cf_info.wth = wtap_open_offline(filename, WTAP_TYPE_AUTO, &err, &err_info, FALSE);
if (!cf_info.wth) { if (!cf_info.wth) {
cfile_open_failure_message("capinfos", filename, err, err_info); cfile_open_failure_message(filename, err, err_info);
return 2; return 2;
} }
@ -1352,7 +1352,7 @@ process_cap_file(const char *filename, gboolean need_separator)
fprintf(stderr, fprintf(stderr,
"capinfos: An error occurred after reading %u packets from \"%s\".\n", "capinfos: An error occurred after reading %u packets from \"%s\".\n",
packet, filename); packet, filename);
cfile_read_failure_message("capinfos", filename, err, err_info); cfile_read_failure_message(filename, err, err_info);
if (err == WTAP_ERR_SHORT_READ) { if (err == WTAP_ERR_SHORT_READ) {
/* Don't give up completely with this one. */ /* Don't give up completely with this one. */
status = 1; status = 1;
@ -1511,11 +1511,10 @@ print_usage(FILE *output)
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in capinfos.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) capinfos_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "capinfos: "); fprintf(stderr, "capinfos: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
@ -1526,7 +1525,7 @@ failure_warning_message(const char *msg_format, va_list ap)
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) capinfos_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
@ -1545,6 +1544,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines capinfos_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
gboolean need_separator = FALSE; gboolean need_separator = FALSE;
int opt; int opt;
int overall_error_status = EXIT_SUCCESS; int overall_error_status = EXIT_SUCCESS;
@ -1570,7 +1581,7 @@ main(int argc, char *argv[])
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
#endif #endif
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(capinfos_cmdarg_err, capinfos_cmdarg_err_cont);
/* Get the decimal point. */ /* Get the decimal point. */
decimal_point = g_strdup(localeconv()->decimal_point); decimal_point = g_strdup(localeconv()->decimal_point);
@ -1599,8 +1610,7 @@ main(int argc, char *argv[])
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("capinfos", &capinfos_report_routines);
NULL, NULL, NULL);
wtap_init(TRUE); wtap_init(TRUE);

View File

@ -61,11 +61,10 @@ print_usage(FILE *output)
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in captype.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) captype_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "captype: "); fprintf(stderr, "captype: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
@ -76,7 +75,7 @@ failure_warning_message(const char *msg_format, va_list ap)
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) captype_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
@ -86,6 +85,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines captype_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
wtap *wth; wtap *wth;
int err; int err;
gchar *err_info; gchar *err_info;
@ -108,7 +119,7 @@ main(int argc, char *argv[])
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
#endif #endif
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(captype_cmdarg_err, captype_cmdarg_err_cont);
/* Initialize the version information. */ /* Initialize the version information. */
ws_init_version_info("Captype (Wireshark)", NULL, NULL, NULL); ws_init_version_info("Captype (Wireshark)", NULL, NULL, NULL);
@ -134,8 +145,7 @@ main(int argc, char *argv[])
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("captype", &captype_report_routines);
NULL, NULL, NULL);
wtap_init(TRUE); wtap_init(TRUE);
@ -179,7 +189,7 @@ main(int argc, char *argv[])
if (err == WTAP_ERR_FILE_UNKNOWN_FORMAT) if (err == WTAP_ERR_FILE_UNKNOWN_FORMAT)
printf("%s: unknown\n", argv[i]); printf("%s: unknown\n", argv[i]);
else { else {
cfile_open_failure_message("captype", argv[i], err, err_info); cfile_open_failure_message(argv[i], err, err_info);
overall_error_status = 2; /* remember that an error has occurred */ overall_error_status = 2; /* remember that an error has occurred */
} }
} }

View File

@ -80,6 +80,7 @@ libwsutil.so.0 libwsutil0 #MINVER#
get_datafile_path@Base 1.12.0~rc1 get_datafile_path@Base 1.12.0~rc1
get_dirname@Base 1.12.0~rc1 get_dirname@Base 1.12.0~rc1
get_extcap_dir@Base 1.99.0 get_extcap_dir@Base 1.99.0
get_friendly_program_name@Base 3.5.0
get_global_profiles_dir@Base 1.12.0~rc1 get_global_profiles_dir@Base 1.12.0~rc1
get_os_version_info@Base 1.99.0 get_os_version_info@Base 1.99.0
get_persconffile_path@Base 1.12.0~rc1 get_persconffile_path@Base 1.12.0~rc1
@ -160,6 +161,11 @@ libwsutil.so.0 libwsutil0 #MINVER#
register_codec@Base 3.1.0 register_codec@Base 3.1.0
relinquish_special_privs_perm@Base 1.10.0 relinquish_special_privs_perm@Base 1.10.0
rename_persconffile_profile@Base 1.12.0~rc1 rename_persconffile_profile@Base 1.12.0~rc1
report_cfile_close_failure@Base 3.5.0
report_cfile_dump_open_failure@Base 3.5.0
report_cfile_open_failure@Base 3.5.0
report_cfile_read_failure@Base 3.5.0
report_cfile_write_failure@Base 3.5.0
report_failure@Base 1.12.0~rc1 report_failure@Base 1.12.0~rc1
report_open_failure@Base 1.12.0~rc1 report_open_failure@Base 1.12.0~rc1
report_read_failure@Base 1.12.0~rc1 report_read_failure@Base 1.12.0~rc1

View File

@ -33,21 +33,34 @@
#include <wiretap/wtap.h> #include <wiretap/wtap.h>
#include "ui/util.h" #include "ui/util.h"
#include "ui/cmdarg_err.h"
#include "ui/failure_message.h"
static void failure_warning_message(const char *msg_format, va_list ap); static void dftest_cmdarg_err(const char *fmt, va_list ap);
static void open_failure_message(const char *filename, int err, static void dftest_cmdarg_err_cont(const char *fmt, va_list ap);
gboolean for_writing);
static void read_failure_message(const char *filename, int err);
static void write_failure_message(const char *filename, int err);
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines dftest_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
char *text; char *text;
dfilter_t *df; dfilter_t *df;
gchar *err_msg; gchar *err_msg;
cmdarg_err_init(dftest_cmdarg_err, dftest_cmdarg_err_cont);
/* /*
* Get credential information for later use. * Get credential information for later use.
*/ */
@ -64,9 +77,7 @@ main(int argc, char **argv)
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("dftest", &dftest_report_routines);
open_failure_message, read_failure_message,
write_failure_message);
timestamp_set_type(TS_RELATIVE); timestamp_set_type(TS_RELATIVE);
timestamp_set_seconds_type(TS_SECONDS_DEFAULT); timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
@ -137,48 +148,26 @@ main(int argc, char **argv)
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in "dftest".
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) dftest_cmdarg_err(const char *fmt, va_list ap)
{ {
fprintf(stderr, "dftest: "); fprintf(stderr, "dftest: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/* /*
* Open/create errors are reported with an console message in "dftest". * Report additional information for an error in command-line arguments.
*/ */
static void static void
open_failure_message(const char *filename, int err, gboolean for_writing) dftest_cmdarg_err_cont(const char *fmt, va_list ap)
{ {
fprintf(stderr, "dftest: "); vfprintf(stderr, fmt, ap);
fprintf(stderr, file_open_error_message(err, for_writing), filename);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/*
* Read errors are reported with an console message in "dftest".
*/
static void
read_failure_message(const char *filename, int err)
{
fprintf(stderr, "dftest: An error occurred while reading from the file \"%s\": %s.\n",
filename, g_strerror(err));
}
/*
* Write errors are reported with an console message in "dftest".
*/
static void
write_failure_message(const char *filename, int err)
{
fprintf(stderr, "dftest: An error occurred while writing to the file \"%s\": %s.\n",
filename, g_strerror(err));
}
/* /*
* Editor modelines - https://www.wireshark.org/tools/modelines.html * Editor modelines - https://www.wireshark.org/tools/modelines.html
* *

View File

@ -970,11 +970,10 @@ framenum_compare(gconstpointer a, gconstpointer b, gpointer user_data _U_)
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in editcap.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) editcap_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "editcap: "); fprintf(stderr, "editcap: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
@ -985,7 +984,7 @@ failure_warning_message(const char *msg_format, va_list ap)
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) editcap_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
@ -1078,6 +1077,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines editcap_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
wtap *wth = NULL; wtap *wth = NULL;
int i, j, read_err, write_err; int i, j, read_err, write_err;
gchar *read_err_info, *write_err_info; gchar *read_err_info, *write_err_info;
@ -1141,7 +1152,7 @@ main(int argc, char *argv[])
gboolean valid_seed = FALSE; gboolean valid_seed = FALSE;
unsigned int seed = 0; unsigned int seed = 0;
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(editcap_cmdarg_err, editcap_cmdarg_err_cont);
#ifdef _WIN32 #ifdef _WIN32
create_app_running_mutex(); create_app_running_mutex();
@ -1167,8 +1178,7 @@ main(int argc, char *argv[])
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("editcap", &editcap_report_routines);
NULL, NULL, NULL);
wtap_init(TRUE); wtap_init(TRUE);
@ -1546,8 +1556,7 @@ main(int argc, char *argv[])
wth = wtap_open_offline(argv[optind], WTAP_TYPE_AUTO, &read_err, &read_err_info, FALSE); wth = wtap_open_offline(argv[optind], WTAP_TYPE_AUTO, &read_err, &read_err_info, FALSE);
if (!wth) { if (!wth) {
cfile_open_failure_message("editcap", argv[optind], read_err, cfile_open_failure_message(argv[optind], read_err, read_err_info);
read_err_info);
ret = INVALID_FILE; ret = INVALID_FILE;
goto clean_exit; goto clean_exit;
} }
@ -1733,7 +1742,7 @@ main(int argc, char *argv[])
&write_err_info); &write_err_info);
if (pdh == NULL) { if (pdh == NULL) {
cfile_dump_open_failure_message("editcap", filename, cfile_dump_open_failure_message(filename,
write_err, write_err_info, write_err, write_err_info,
out_file_type_subtype); out_file_type_subtype);
ret = INVALID_FILE; ret = INVALID_FILE;
@ -1745,8 +1754,7 @@ main(int argc, char *argv[])
* Process whatever IDBs we haven't seen yet. * Process whatever IDBs we haven't seen yet.
*/ */
if (!process_new_idbs(wth, pdh, idbs_seen, &write_err, &write_err_info)) { if (!process_new_idbs(wth, pdh, idbs_seen, &write_err, &write_err_info)) {
cfile_write_failure_message("editcap", argv[optind], cfile_write_failure_message(argv[optind], filename,
filename,
write_err, write_err_info, write_err, write_err_info,
read_count, read_count,
out_file_type_subtype); out_file_type_subtype);
@ -1786,7 +1794,7 @@ main(int argc, char *argv[])
&write_err, &write_err_info); &write_err, &write_err_info);
if (pdh == NULL) { if (pdh == NULL) {
cfile_dump_open_failure_message("editcap", filename, cfile_dump_open_failure_message(filename,
write_err, write_err,
write_err_info, write_err_info,
out_file_type_subtype); out_file_type_subtype);
@ -1817,7 +1825,7 @@ main(int argc, char *argv[])
pdh = editcap_dump_open(filename, &params, idbs_seen, pdh = editcap_dump_open(filename, &params, idbs_seen,
&write_err, &write_err_info); &write_err, &write_err_info);
if (pdh == NULL) { if (pdh == NULL) {
cfile_dump_open_failure_message("editcap", filename, cfile_dump_open_failure_message(filename,
write_err, write_err_info, write_err, write_err_info,
out_file_type_subtype); out_file_type_subtype);
ret = INVALID_FILE; ret = INVALID_FILE;
@ -2191,8 +2199,7 @@ main(int argc, char *argv[])
/* Attempt to dump out current frame to the output file */ /* Attempt to dump out current frame to the output file */
if (!wtap_dump(pdh, rec, buf, &write_err, &write_err_info)) { if (!wtap_dump(pdh, rec, buf, &write_err, &write_err_info)) {
cfile_write_failure_message("editcap", argv[optind], cfile_write_failure_message(argv[optind], filename,
filename,
write_err, write_err_info, write_err, write_err_info,
read_count, read_count,
out_file_type_subtype); out_file_type_subtype);
@ -2212,8 +2219,7 @@ main(int argc, char *argv[])
if (read_err != 0) { if (read_err != 0) {
/* Print a message noting that the read failed somewhere along the /* Print a message noting that the read failed somewhere along the
* line. */ * line. */
cfile_read_failure_message("editcap", argv[optind], read_err, cfile_read_failure_message(argv[optind], read_err, read_err_info);
read_err_info);
} }
if (!pdh) { if (!pdh) {
@ -2225,7 +2231,7 @@ main(int argc, char *argv[])
pdh = editcap_dump_open(filename, &params, idbs_seen, &write_err, pdh = editcap_dump_open(filename, &params, idbs_seen, &write_err,
&write_err_info); &write_err_info);
if (pdh == NULL) { if (pdh == NULL) {
cfile_dump_open_failure_message("editcap", filename, cfile_dump_open_failure_message(filename,
write_err, write_err_info, write_err, write_err_info,
out_file_type_subtype); out_file_type_subtype);
ret = INVALID_FILE; ret = INVALID_FILE;

View File

@ -21,6 +21,7 @@
#include <wsutil/strtoi.h> #include <wsutil/strtoi.h>
#include <wsutil/filesystem.h> #include <wsutil/filesystem.h>
#include <wsutil/privileges.h> #include <wsutil/privileges.h>
#include <wsutil/report_message.h>
#include <wsutil/please_report_bug.h> #include <wsutil/please_report_bug.h>
#include <ui/cmdarg_err.h> #include <ui/cmdarg_err.h>
#include <wsutil/inet_addr.h> #include <wsutil/inet_addr.h>
@ -359,7 +360,7 @@ static const char* interface_to_logbuf(char* interface)
* g_logv() with the appropriate arguments. * g_logv() with the appropriate arguments.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) androiddump_cmdarg_err(const char *msg_format, va_list ap)
{ {
g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, msg_format, ap); g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, msg_format, ap);
} }
@ -459,12 +460,12 @@ static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) {
file_type_subtype = wtap_pcap_nsec_file_type_subtype(); file_type_subtype = wtap_pcap_nsec_file_type_subtype();
extcap_dumper.dumper.wtap = wtap_dump_open(fifo, file_type_subtype, WTAP_UNCOMPRESSED, &params, &err, &err_info); extcap_dumper.dumper.wtap = wtap_dump_open(fifo, file_type_subtype, WTAP_UNCOMPRESSED, &params, &err, &err_info);
if (!extcap_dumper.dumper.wtap) { if (!extcap_dumper.dumper.wtap) {
cfile_dump_open_failure_message("androiddump", fifo, err, err_info, file_type_subtype); cfile_dump_open_failure_message(fifo, err, err_info, file_type_subtype);
exit(EXIT_CODE_CANNOT_SAVE_WIRETAP_DUMP); exit(EXIT_CODE_CANNOT_SAVE_WIRETAP_DUMP);
} }
extcap_dumper.encap = encap; extcap_dumper.encap = encap;
if (!wtap_dump_flush(extcap_dumper.dumper.wtap, &err)) { if (!wtap_dump_flush(extcap_dumper.dumper.wtap, &err)) {
cfile_dump_open_failure_message("androiddump", fifo, err, NULL, file_type_subtype); cfile_dump_open_failure_message(fifo, err, NULL, file_type_subtype);
exit(EXIT_CODE_CANNOT_SAVE_WIRETAP_DUMP); exit(EXIT_CODE_CANNOT_SAVE_WIRETAP_DUMP);
} }
#endif #endif
@ -522,13 +523,13 @@ static gboolean extcap_dumper_dump(struct extcap_dumper extcap_dumper,
rec.rec_header.packet_header.pkt_encap = extcap_dumper.encap; rec.rec_header.packet_header.pkt_encap = extcap_dumper.encap;
if (!wtap_dump(extcap_dumper.dumper.wtap, &rec, (const guint8 *) buffer, &err, &err_info)) { if (!wtap_dump(extcap_dumper.dumper.wtap, &rec, (const guint8 *) buffer, &err, &err_info)) {
cfile_write_failure_message("androiddump", NULL, fifo, err, err_info, 0, cfile_write_failure_message(NULL, fifo, err, err_info, 0,
wtap_dump_file_type_subtype(extcap_dumper.dumper.wtap)); wtap_dump_file_type_subtype(extcap_dumper.dumper.wtap));
return FALSE; return FALSE;
} }
if (!wtap_dump_flush(extcap_dumper.dumper.wtap, &err)) { if (!wtap_dump_flush(extcap_dumper.dumper.wtap, &err)) {
cfile_write_failure_message("androiddump", NULL, fifo, err, NULL, 0, cfile_write_failure_message(NULL, fifo, err, NULL, 0,
wtap_dump_file_type_subtype(extcap_dumper.dumper.wtap)); wtap_dump_file_type_subtype(extcap_dumper.dumper.wtap));
return FALSE; return FALSE;
} }
@ -2490,6 +2491,18 @@ static int capture_android_tcpdump(char *interface, char *fifo,
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
char *err_msg; char *err_msg;
static const struct report_message_routines androiddummp_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
int ret = EXIT_CODE_GENERIC; int ret = EXIT_CODE_GENERIC;
int option_idx = 0; int option_idx = 0;
int result; int result;
@ -2514,7 +2527,7 @@ int main(int argc, char *argv[]) {
char *help_url; char *help_url;
char *help_header = NULL; char *help_header = NULL;
cmdarg_err_init(failure_warning_message, failure_warning_message); cmdarg_err_init(androiddump_cmdarg_err, androiddump_cmdarg_err);
/* /*
* Get credential information for later use. * Get credential information for later use.
@ -2532,6 +2545,8 @@ int main(int argc, char *argv[]) {
g_free(err_msg); g_free(err_msg);
} }
init_report_message("androiddump", &androiddummp_report_routines);
extcap_conf = g_new0(extcap_parameters, 1); extcap_conf = g_new0(extcap_parameters, 1);
help_url = data_file_url("androiddump.html"); help_url = data_file_url("androiddump.html");

View File

@ -125,7 +125,7 @@ static int list_config(char *interface)
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
static void failure_warning_message(const char *msg_format, va_list ap) static void randpktdump_cmdarg_err(const char *msg_format, va_list ap)
{ {
g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, msg_format, ap); g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, msg_format, ap);
} }
@ -150,7 +150,7 @@ int main(int argc, char *argv[])
char* help_url; char* help_url;
char* help_header = NULL; char* help_header = NULL;
cmdarg_err_init(failure_warning_message, failure_warning_message); cmdarg_err_init(randpktdump_cmdarg_err, randpktdump_cmdarg_err);
/* /*
* Get credential information for later use. * Get credential information for later use.

View File

@ -1,4 +1,4 @@
/* oss-fuzzshark.c /* fuzzshark.c
* *
* Fuzzer variant of Wireshark for oss-fuzz * Fuzzer variant of Wireshark for oss-fuzz
* *
@ -21,6 +21,7 @@
#include <epan/epan.h> #include <epan/epan.h>
#include <ui/cmdarg_err.h> #include <ui/cmdarg_err.h>
#include <ui/failure_message.h>
#include <wsutil/filesystem.h> #include <wsutil/filesystem.h>
#include <wsutil/privileges.h> #include <wsutil/privileges.h>
#include <wsutil/report_message.h> #include <wsutil/report_message.h>
@ -49,51 +50,21 @@ static epan_t *fuzz_epan;
static epan_dissect_t *fuzz_edt; static epan_dissect_t *fuzz_edt;
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in oss-fuzzshark.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) fuzzshark_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "oss-fuzzshark: "); fprintf(stderr, "oss-fuzzshark: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/*
* Open/create errors are reported with an console message in oss-fuzzshark.
*/
static void
open_failure_message(const char *filename, int err, gboolean for_writing)
{
fprintf(stderr, "oss-fuzzshark: ");
fprintf(stderr, file_open_error_message(err, for_writing), filename);
fprintf(stderr, "\n");
}
/*
* Read errors are reported with an console message in oss-fuzzshark.
*/
static void
read_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while reading from the file \"%s\": %s.", filename, g_strerror(err));
}
/*
* Write errors are reported with an console message in oss-fuzzshark.
*/
static void
write_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while writing to the file \"%s\": %s.", filename, g_strerror(err));
}
/* /*
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) fuzzshark_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
@ -181,6 +152,19 @@ fuzz_init(int argc _U_, char **argv)
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines fuzzshark_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
char *err_msg = NULL; char *err_msg = NULL;
e_prefs *prefs_p; e_prefs *prefs_p;
int ret = EXIT_SUCCESS; int ret = EXIT_SUCCESS;
@ -250,7 +234,7 @@ fuzz_init(int argc _U_, char **argv)
g_setenv("WIRESHARK_DEBUG_WMEM_OVERRIDE", "simple", 0); g_setenv("WIRESHARK_DEBUG_WMEM_OVERRIDE", "simple", 0);
g_setenv("G_SLICE", "always-malloc", 0); g_setenv("G_SLICE", "always-malloc", 0);
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(fuzzshark_cmdarg_err, fuzzshark_cmdarg_err_cont);
/* /*
* Get credential information for later use, and drop privileges * Get credential information for later use, and drop privileges
@ -273,8 +257,7 @@ fuzz_init(int argc _U_, char **argv)
ws_init_version_info("OSS Fuzzshark (Wireshark)", NULL, ws_init_version_info("OSS Fuzzshark (Wireshark)", NULL,
epan_get_compiled_version_info, epan_get_runtime_version_info); epan_get_compiled_version_info, epan_get_runtime_version_info);
init_report_message(failure_warning_message, failure_warning_message, init_report_message("fuzzshark", &fuzzshark_report_routines);
open_failure_message, read_failure_message, write_failure_message);
timestamp_set_type(TS_RELATIVE); timestamp_set_type(TS_RELATIVE);
timestamp_set_precision(TS_PREC_AUTO); timestamp_set_precision(TS_PREC_AUTO);

View File

@ -101,18 +101,6 @@ mergecap_cmdarg_err_cont(const char *fmt, va_list ap)
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/*
* General errors and warnings are reported with an console message
* in mergecap.
*/
static void
failure_warning_message(const char *msg_format, va_list ap)
{
fprintf(stderr, "mergecap: ");
vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n");
}
static void static void
list_capture_types(void) { list_capture_types(void) {
GArray *writable_type_subtypes; GArray *writable_type_subtypes;
@ -206,6 +194,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines mergecap_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
int opt; int opt;
static const struct option long_options[] = { static const struct option long_options[] = {
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
@ -252,8 +252,7 @@ main(int argc, char *argv[])
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("mergecap", &mergecap_report_routines);
NULL, NULL, NULL);
wtap_init(TRUE); wtap_init(TRUE);
@ -393,18 +392,15 @@ main(int argc, char *argv[])
break; break;
case MERGE_ERR_CANT_OPEN_INFILE: case MERGE_ERR_CANT_OPEN_INFILE:
cfile_open_failure_message("mergecap", argv[optind + err_fileno], cfile_open_failure_message(argv[optind + err_fileno], err, err_info);
err, err_info);
break; break;
case MERGE_ERR_CANT_OPEN_OUTFILE: case MERGE_ERR_CANT_OPEN_OUTFILE:
cfile_dump_open_failure_message("mergecap", out_filename, err, err_info, cfile_dump_open_failure_message(out_filename, err, err_info, file_type);
file_type);
break; break;
case MERGE_ERR_CANT_READ_INFILE: case MERGE_ERR_CANT_READ_INFILE:
cfile_read_failure_message("mergecap", argv[optind + err_fileno], cfile_read_failure_message(argv[optind + err_fileno], err, err_info);
err, err_info);
break; break;
case MERGE_ERR_BAD_PHDR_INTERFACE_ID: case MERGE_ERR_BAD_PHDR_INTERFACE_ID:
@ -413,9 +409,8 @@ main(int argc, char *argv[])
break; break;
case MERGE_ERR_CANT_WRITE_OUTFILE: case MERGE_ERR_CANT_WRITE_OUTFILE:
cfile_write_failure_message("mergecap", argv[optind + err_fileno], cfile_write_failure_message(argv[optind + err_fileno], out_filename,
out_filename, err, err_info, err_framenum, err, err_info, err_framenum, file_type);
file_type);
break; break;
case MERGE_ERR_CANT_CLOSE_OUTFILE: case MERGE_ERR_CANT_CLOSE_OUTFILE:

View File

@ -16,6 +16,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <ui/clopts_common.h> #include <ui/clopts_common.h>
#include <ui/failure_message.h>
#include <ui/cmdarg_err.h> #include <ui/cmdarg_err.h>
#include <wsutil/file_util.h> #include <wsutil/file_util.h>
#include <wsutil/filesystem.h> #include <wsutil/filesystem.h>
@ -48,11 +49,10 @@
#define CLOSE_ERROR 2 #define CLOSE_ERROR 2
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in randpkt.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) randpkt_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "randpkt: "); fprintf(stderr, "randpkt: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
@ -63,7 +63,7 @@ failure_warning_message(const char *msg_format, va_list ap)
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) randpkt_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
@ -109,6 +109,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines randpkt_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
int opt; int opt;
int produce_type = -1; int produce_type = -1;
char *produce_filename = NULL; char *produce_filename = NULL;
@ -141,12 +153,11 @@ main(int argc, char *argv[])
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("randpkt", &randpkt_report_routines);
NULL, NULL, NULL);
wtap_init(TRUE); wtap_init(TRUE);
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(randpkt_cmdarg_err, randpkt_cmdarg_err_cont);
#ifdef _WIN32 #ifdef _WIN32
create_app_running_mutex(); create_app_running_mutex();

View File

@ -620,14 +620,14 @@ void randpkt_loop(randpkt_example* example, guint64 produce_count, guint64 packe
} }
if (!wtap_dump(example->dump, rec, buffer, &err, &err_info)) { if (!wtap_dump(example->dump, rec, buffer, &err, &err_info)) {
cfile_write_failure_message("randpkt", NULL, cfile_write_failure_message(NULL,
example->filename, err, err_info, 0, example->filename, err, err_info, 0,
wtap_dump_file_type_subtype(example->dump)); wtap_dump_file_type_subtype(example->dump));
} }
if (packet_delay_ms) { if (packet_delay_ms) {
g_usleep(1000 * (gulong)packet_delay_ms); g_usleep(1000 * (gulong)packet_delay_ms);
if (!wtap_dump_flush(example->dump, &err)) { if (!wtap_dump_flush(example->dump, &err)) {
cfile_write_failure_message("randpkt", NULL, cfile_write_failure_message(NULL,
example->filename, err, NULL, 0, example->filename, err, NULL, 0,
wtap_dump_file_type_subtype(example->dump)); wtap_dump_file_type_subtype(example->dump));
} }
@ -683,7 +683,7 @@ int randpkt_example_init(randpkt_example* example, char* produce_filename, int p
example->filename = produce_filename; example->filename = produce_filename;
} }
if (!example->dump) { if (!example->dump) {
cfile_dump_open_failure_message("randpkt", produce_filename, cfile_dump_open_failure_message(produce_filename,
err, err_info, file_type_subtype); err, err_info, file_type_subtype);
return WRITE_ERROR; return WRITE_ERROR;
} }

View File

@ -144,11 +144,6 @@ static gboolean process_packet(capture_file *cf, epan_dissect_t *edt, gint64 off
wtap_rec *rec, Buffer *buf); wtap_rec *rec, Buffer *buf);
static void show_print_file_io_error(int err); static void show_print_file_io_error(int err);
static void failure_warning_message(const char *msg_format, va_list ap);
static void open_failure_message(const char *filename, int err,
gboolean for_writing);
static void read_failure_message(const char *filename, int err);
static void write_failure_message(const char *filename, int err);
static void rawshark_cmdarg_err(const char *fmt, va_list ap); static void rawshark_cmdarg_err(const char *fmt, va_list ap);
static void rawshark_cmdarg_err_cont(const char *fmt, va_list ap); static void rawshark_cmdarg_err_cont(const char *fmt, va_list ap);
static void protocolinfo_init(char *field); static void protocolinfo_init(char *field);
@ -437,6 +432,18 @@ main(int argc, char *argv[])
#define OPTSTRING_INIT "d:F:hlm:nN:o:pr:R:sS:t:v" #define OPTSTRING_INIT "d:F:hlm:nN:o:pr:R:sS:t:v"
static const char optstring[] = OPTSTRING_INIT; static const char optstring[] = OPTSTRING_INIT;
static const struct report_message_routines rawshark_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
/* /*
* Set the C-language locale to the native environment and set the * Set the C-language locale to the native environment and set the
@ -501,9 +508,7 @@ main(int argc, char *argv[])
(GLogLevelFlags)log_flags, (GLogLevelFlags)log_flags,
log_func_ignore, NULL /* user_data */); log_func_ignore, NULL /* user_data */);
init_report_message(failure_warning_message, failure_warning_message, init_report_message("rawshark", &rawshark_report_routines);
open_failure_message, read_failure_message,
write_failure_message);
timestamp_set_type(TS_RELATIVE); timestamp_set_type(TS_RELATIVE);
timestamp_set_precision(TS_PREC_AUTO); timestamp_set_precision(TS_PREC_AUTO);
@ -966,7 +971,7 @@ load_cap_file(capture_file *cf)
ws_buffer_free(&buf); ws_buffer_free(&buf);
if (err != 0) { if (err != 0) {
/* Print a message noting that the read failed somewhere along the line. */ /* Print a message noting that the read failed somewhere along the line. */
cfile_read_failure_message("Rawshark", cf->filename, err, err_info); cfile_read_failure_message(cf->filename, err, err_info);
return FALSE; return FALSE;
} }
@ -1431,29 +1436,6 @@ show_print_file_io_error(int err)
} }
} }
/*
* General errors and warnings are reported with an console message
* in Rawshark.
*/
static void
failure_warning_message(const char *msg_format, va_list ap)
{
fprintf(stderr, "rawshark: ");
vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n");
}
/*
* Open/create errors are reported with an console message in Rawshark.
*/
static void
open_failure_message(const char *filename, int err, gboolean for_writing)
{
fprintf(stderr, "rawshark: ");
fprintf(stderr, file_open_error_message(err, for_writing), filename);
fprintf(stderr, "\n");
}
static const nstime_t * static const nstime_t *
raw_get_frame_ts(struct packet_provider_data *prov, guint32 frame_num) raw_get_frame_ts(struct packet_provider_data *prov, guint32 frame_num)
{ {
@ -1522,26 +1504,6 @@ raw_cf_open(capture_file *cf, const char *fname)
return CF_OK; return CF_OK;
} }
/*
* Read errors are reported with an console message in Rawshark.
*/
static void
read_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
filename, g_strerror(err));
}
/*
* Write errors are reported with an console message in Rawshark.
*/
static void
write_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
filename, g_strerror(err));
}
/* /*
* Report an error in command-line arguments. * Report an error in command-line arguments.
*/ */

View File

@ -105,7 +105,7 @@ frame_write(FrameRecord_t *frame, wtap *wth, wtap_dumper *pdh,
fprintf(stderr, fprintf(stderr,
"reordercap: An error occurred while re-reading \"%s\".\n", "reordercap: An error occurred while re-reading \"%s\".\n",
infile); infile);
cfile_read_failure_message("reordercap", infile, err, err_info); cfile_read_failure_message(infile, err, err_info);
exit(1); exit(1);
} }
} }
@ -117,8 +117,7 @@ frame_write(FrameRecord_t *frame, wtap *wth, wtap_dumper *pdh,
/* Dump frame to outfile */ /* Dump frame to outfile */
if (!wtap_dump(pdh, rec, ws_buffer_start_ptr(buf), &err, &err_info)) { if (!wtap_dump(pdh, rec, ws_buffer_start_ptr(buf), &err, &err_info)) {
cfile_write_failure_message("reordercap", infile, outfile, err, cfile_write_failure_message(infile, outfile, err, err_info, frame->num,
err_info, frame->num,
wtap_file_type_subtype(wth)); wtap_file_type_subtype(wth));
exit(1); exit(1);
} }
@ -146,7 +145,7 @@ frames_compare(gconstpointer a, gconstpointer b)
* in reordercap. * in reordercap.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) reordercap_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "reordercap: "); fprintf(stderr, "reordercap: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
@ -157,7 +156,7 @@ failure_warning_message(const char *msg_format, va_list ap)
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) reordercap_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
@ -170,6 +169,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *init_progfile_dir_error; char *init_progfile_dir_error;
static const struct report_message_routines reordercap_message_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
wtap *wth = NULL; wtap *wth = NULL;
wtap_dumper *pdh = NULL; wtap_dumper *pdh = NULL;
wtap_rec rec; wtap_rec rec;
@ -196,7 +207,7 @@ main(int argc, char *argv[])
char *infile; char *infile;
const char *outfile; const char *outfile;
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(reordercap_cmdarg_err, reordercap_cmdarg_err_cont);
/* Initialize the version information. */ /* Initialize the version information. */
ws_init_version_info("Reordercap (Wireshark)", NULL, NULL, NULL); ws_init_version_info("Reordercap (Wireshark)", NULL, NULL, NULL);
@ -218,8 +229,7 @@ main(int argc, char *argv[])
g_free(init_progfile_dir_error); g_free(init_progfile_dir_error);
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("reordercap", &reordercap_message_routines);
NULL, NULL, NULL);
wtap_init(TRUE); wtap_init(TRUE);
@ -260,7 +270,7 @@ main(int argc, char *argv[])
open_routine reader to use, then the following needs to change. */ open_routine reader to use, then the following needs to change. */
wth = wtap_open_offline(infile, WTAP_TYPE_AUTO, &err, &err_info, TRUE); wth = wtap_open_offline(infile, WTAP_TYPE_AUTO, &err, &err_info, TRUE);
if (wth == NULL) { if (wth == NULL) {
cfile_open_failure_message("reordercap", infile, err, err_info); cfile_open_failure_message(infile, err, err_info);
ret = OPEN_ERROR; ret = OPEN_ERROR;
goto clean_exit; goto clean_exit;
} }
@ -280,7 +290,7 @@ main(int argc, char *argv[])
params.idb_inf = NULL; params.idb_inf = NULL;
if (pdh == NULL) { if (pdh == NULL) {
cfile_dump_open_failure_message("reordercap", outfile, err, err_info, cfile_dump_open_failure_message(outfile, err, err_info,
wtap_file_type_subtype(wth)); wtap_file_type_subtype(wth));
wtap_dump_params_cleanup(&params); wtap_dump_params_cleanup(&params);
ret = OUTPUT_FILE_ERROR; ret = OUTPUT_FILE_ERROR;
@ -316,7 +326,7 @@ main(int argc, char *argv[])
ws_buffer_free(&buf); ws_buffer_free(&buf);
if (err != 0) { if (err != 0) {
/* Print a message noting that the read failed somewhere along the line. */ /* Print a message noting that the read failed somewhere along the line. */
cfile_read_failure_message("reordercap", infile, err, err_info); cfile_read_failure_message(infile, err, err_info);
} }
printf("%u frames, %u out of order\n", frames->len, wrong_order_count); printf("%u frames, %u out of order\n", frames->len, wrong_order_count);

View File

@ -74,12 +74,8 @@ capture_file cfile;
static guint32 cum_bytes; static guint32 cum_bytes;
static frame_data ref_frame; static frame_data ref_frame;
static void failure_warning_message(const char *msg_format, va_list ap); static void sharkd_cmdarg_err(const char *msg_format, va_list ap);
static void open_failure_message(const char *filename, int err, static void sharkd_cmdarg_err_cont(const char *msg_format, va_list ap);
gboolean for_writing);
static void read_failure_message(const char *filename, int err);
static void write_failure_message(const char *filename, int err);
static void failure_message_cont(const char *msg_format, va_list ap);
static void static void
print_current_user(void) { print_current_user(void) {
@ -107,8 +103,20 @@ main(int argc, char *argv[])
char *err_msg = NULL; char *err_msg = NULL;
e_prefs *prefs_p; e_prefs *prefs_p;
int ret = EXIT_SUCCESS; int ret = EXIT_SUCCESS;
static const struct report_message_routines sharkd_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(sharkd_cmdarg_err, sharkd_cmdarg_err_cont);
/* /*
* Get credential information for later use, and drop privileges * Get credential information for later use, and drop privileges
@ -140,9 +148,7 @@ main(int argc, char *argv[])
goto clean_exit; goto clean_exit;
} }
init_report_message(failure_warning_message, failure_warning_message, init_report_message("sharkd", &sharkd_report_routines);
open_failure_message, read_failure_message,
write_failure_message);
timestamp_set_type(TS_RELATIVE); timestamp_set_type(TS_RELATIVE);
timestamp_set_precision(TS_PREC_AUTO); timestamp_set_precision(TS_PREC_AUTO);
@ -392,7 +398,7 @@ load_cap_file(capture_file *cf, int max_packet_count, gint64 max_byte_count)
} }
if (err != 0) { if (err != 0) {
cfile_read_failure_message("sharkd", cf->filename, err, err_info); cfile_read_failure_message(cf->filename, err, err_info);
} }
return err; return err;
@ -448,58 +454,26 @@ cf_open(capture_file *cf, const char *fname, unsigned int type, gboolean is_temp
return CF_OK; return CF_OK;
fail: fail:
cfile_open_failure_message("sharkd", fname, *err, err_info); cfile_open_failure_message(fname, *err, err_info);
return CF_ERROR; return CF_ERROR;
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in sharkd.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) sharkd_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "sharkd: "); fprintf(stderr, "sharkd: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/*
* Open/create errors are reported with an console message in sharkd.
*/
static void
open_failure_message(const char *filename, int err, gboolean for_writing)
{
fprintf(stderr, "sharkd: ");
fprintf(stderr, file_open_error_message(err, for_writing), filename);
fprintf(stderr, "\n");
}
/*
* Read errors are reported with an console message in sharkd.
*/
static void
read_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
filename, g_strerror(err));
}
/*
* Write errors are reported with an console message in sharkd.
*/
static void
write_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
filename, g_strerror(err));
}
/* /*
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) sharkd_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");

View File

@ -63,6 +63,7 @@
#include "ui/util.h" #include "ui/util.h"
#include "ui/decode_as_utils.h" #include "ui/decode_as_utils.h"
#include "ui/dissect_opts.h" #include "ui/dissect_opts.h"
#include "ui/failure_message.h"
#include <epan/epan_dissect.h> #include <epan/epan_dissect.h>
#include <epan/tap.h> #include <epan/tap.h>
#include <epan/stat_tap_ui.h> #include <epan/stat_tap_ui.h>
@ -134,12 +135,8 @@ static gboolean write_finale(void);
static const char *cf_open_error_message(int err, gchar *err_info, static const char *cf_open_error_message(int err, gchar *err_info,
gboolean for_writing, int file_type); gboolean for_writing, int file_type);
static void failure_warning_message(const char *msg_format, va_list ap); static void tfshark_cmdarg_err(const char *msg_format, va_list ap);
static void open_failure_message(const char *filename, int err, static void tfshark_cmdarg_err_cont(const char *msg_format, va_list ap);
gboolean for_writing);
static void read_failure_message(const char *filename, int err);
static void write_failure_message(const char *filename, int err);
static void failure_message_cont(const char *msg_format, va_list ap);
static GHashTable *output_only_tables = NULL; static GHashTable *output_only_tables = NULL;
@ -353,6 +350,18 @@ main(int argc, char *argv[])
#define OPTSTRING "+2C:d:e:E:hK:lo:O:qQr:R:S:t:T:u:vVxX:Y:z:" #define OPTSTRING "+2C:d:e:E:hK:lo:O:qQr:R:S:t:T:u:vVxX:Y:z:"
static const char optstring[] = OPTSTRING; static const char optstring[] = OPTSTRING;
static const struct report_message_routines tfshark_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
/* /*
* Set the C-language locale to the native environment and set the * Set the C-language locale to the native environment and set the
@ -364,7 +373,7 @@ main(int argc, char *argv[])
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
#endif #endif
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(tfshark_cmdarg_err, tfshark_cmdarg_err_cont);
#ifdef _WIN32 #ifdef _WIN32
create_app_running_mutex(); create_app_running_mutex();
@ -471,9 +480,7 @@ main(int argc, char *argv[])
(GLogLevelFlags)log_flags, (GLogLevelFlags)log_flags,
tfshark_log_handler, NULL /* user_data */); tfshark_log_handler, NULL /* user_data */);
init_report_message(failure_warning_message, failure_warning_message, init_report_message("tfshark", &tfshark_report_routines);
open_failure_message, read_failure_message,
write_failure_message);
timestamp_set_type(TS_RELATIVE); timestamp_set_type(TS_RELATIVE);
timestamp_set_precision(TS_PREC_AUTO); timestamp_set_precision(TS_PREC_AUTO);
@ -2236,53 +2243,21 @@ cf_open_error_message(int err, gchar *err_info _U_, gboolean for_writing,
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in TFShark.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) tfshark_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "tfshark: "); fprintf(stderr, "tfshark: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/*
* Open/create errors are reported with an console message in TFShark.
*/
static void
open_failure_message(const char *filename, int err, gboolean for_writing)
{
fprintf(stderr, "tfshark: ");
fprintf(stderr, file_open_error_message(err, for_writing), filename);
fprintf(stderr, "\n");
}
/*
* Read errors are reported with an console message in TFShark.
*/
static void
read_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
filename, g_strerror(err));
}
/*
* Write errors are reported with an console message in TFShark.
*/
static void
write_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
filename, g_strerror(err));
}
/* /*
* Report additional information for an error in command-line arguments. * Report additional information for an error in command-line arguments.
*/ */
static void static void
failure_message_cont(const char *msg_format, va_list ap) tfshark_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");

View File

@ -266,12 +266,8 @@ static gboolean write_preamble(capture_file *cf);
static gboolean print_packet(capture_file *cf, epan_dissect_t *edt); static gboolean print_packet(capture_file *cf, epan_dissect_t *edt);
static gboolean write_finale(void); static gboolean write_finale(void);
static void failure_warning_message(const char *msg_format, va_list ap); static void tshark_cmdarg_err(const char *msg_format, va_list ap);
static void open_failure_message(const char *filename, int err, static void tshark_cmdarg_err_cont(const char *msg_format, va_list ap);
gboolean for_writing);
static void read_failure_message(const char *filename, int err);
static void write_failure_message(const char *filename, int err);
static void failure_message_cont(const char *msg_format, va_list ap);
static GHashTable *output_only_tables = NULL; static GHashTable *output_only_tables = NULL;
@ -714,6 +710,18 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *err_msg; char *err_msg;
static const struct report_message_routines tshark_report_routines = {
failure_message,
failure_message,
open_failure_message,
read_failure_message,
write_failure_message,
cfile_open_failure_message,
cfile_dump_open_failure_message,
cfile_read_failure_message,
cfile_write_failure_message,
cfile_close_failure_message
};
int opt; int opt;
static const struct option long_options[] = { static const struct option long_options[] = {
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
@ -797,7 +805,7 @@ main(int argc, char *argv[])
tshark_debug("tshark started with %d args", argc); tshark_debug("tshark started with %d args", argc);
cmdarg_err_init(failure_warning_message, failure_message_cont); cmdarg_err_init(tshark_cmdarg_err, tshark_cmdarg_err_cont);
#ifdef _WIN32 #ifdef _WIN32
create_app_running_mutex(); create_app_running_mutex();
@ -946,9 +954,7 @@ main(int argc, char *argv[])
tshark_log_handler, NULL /* user_data */); tshark_log_handler, NULL /* user_data */);
#endif #endif
init_report_message(failure_warning_message, failure_warning_message, init_report_message("TShark", &tshark_report_routines);
open_failure_message, read_failure_message,
write_failure_message);
#ifdef HAVE_LIBPCAP #ifdef HAVE_LIBPCAP
capture_opts_init(&global_capture_opts); capture_opts_init(&global_capture_opts);
@ -2073,8 +2079,7 @@ main(int argc, char *argv[])
&err, &err_info); &err, &err_info);
g_free(comment); g_free(comment);
if (!exp_pdu_status) { if (!exp_pdu_status) {
cfile_dump_open_failure_message("TShark", exp_pdu_filename, cfile_dump_open_failure_message(exp_pdu_filename, err, err_info,
err, err_info,
out_file_type); out_file_type);
exit_status = INVALID_EXPORT; exit_status = INVALID_EXPORT;
goto clean_exit; goto clean_exit;
@ -3601,7 +3606,7 @@ process_cap_file(capture_file *cf, char *save_file, int out_file_type,
if (pdh == NULL) { if (pdh == NULL) {
/* We couldn't set up to write to the capture file. */ /* We couldn't set up to write to the capture file. */
cfile_dump_open_failure_message("TShark", save_file, err, err_info, cfile_dump_open_failure_message(save_file, err, err_info,
out_file_type); out_file_type);
status = PROCESS_FILE_NO_FILE_PROCESSED; status = PROCESS_FILE_NO_FILE_PROCESSED;
goto out; goto out;
@ -3724,8 +3729,7 @@ process_cap_file(capture_file *cf, char *save_file, int out_file_type,
case PASS_READ_ERROR: case PASS_READ_ERROR:
/* Read error. */ /* Read error. */
cfile_read_failure_message("TShark", cf->filename, err_pass1, cfile_read_failure_message(cf->filename, err_pass1, err_info_pass1);
err_info_pass1);
status = PROCESS_FILE_ERROR; status = PROCESS_FILE_ERROR;
break; break;
@ -3749,7 +3753,7 @@ process_cap_file(capture_file *cf, char *save_file, int out_file_type,
case PASS_READ_ERROR: case PASS_READ_ERROR:
/* Read error. */ /* Read error. */
cfile_read_failure_message("TShark", cf->filename, err, err_info); cfile_read_failure_message(cf->filename, err, err_info);
status = PROCESS_FILE_ERROR; status = PROCESS_FILE_ERROR;
break; break;
@ -3757,8 +3761,8 @@ process_cap_file(capture_file *cf, char *save_file, int out_file_type,
/* Write error. /* Write error.
XXX - framenum is not necessarily the frame number in XXX - framenum is not necessarily the frame number in
the input file if there was a read filter. */ the input file if there was a read filter. */
cfile_write_failure_message("TShark", cf->filename, save_file, cfile_write_failure_message(cf->filename, save_file, err, err_info,
err, err_info, err_framenum, out_file_type); err_framenum, out_file_type);
status = PROCESS_FILE_ERROR; status = PROCESS_FILE_ERROR;
break; break;
@ -4433,7 +4437,7 @@ cf_open(capture_file *cf, const char *fname, unsigned int type, gboolean is_temp
return CF_OK; return CF_OK;
fail: fail:
cfile_open_failure_message("TShark", fname, *err, err_info); cfile_open_failure_message(fname, *err, err_info);
return CF_ERROR; return CF_ERROR;
} }
@ -4512,11 +4516,10 @@ show_print_file_io_error(void)
} }
/* /*
* General errors and warnings are reported with an console message * Report an error in command-line arguments.
* in TShark.
*/ */
static void static void
failure_warning_message(const char *msg_format, va_list ap) tshark_cmdarg_err(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "tshark: "); fprintf(stderr, "tshark: ");
vfprintf(stderr, msg_format, ap); vfprintf(stderr, msg_format, ap);
@ -4524,36 +4527,15 @@ failure_warning_message(const char *msg_format, va_list ap)
} }
/* /*
* Open/create errors are reported with an console message in TShark. * Report additional information for an error in command-line arguments.
*/ */
static void static void
open_failure_message(const char *filename, int err, gboolean for_writing) tshark_cmdarg_err_cont(const char *msg_format, va_list ap)
{ {
fprintf(stderr, "tshark: "); vfprintf(stderr, msg_format, ap);
fprintf(stderr, file_open_error_message(err, for_writing), filename);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
/*
* Read errors are reported with an console message in TShark.
*/
static void
read_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
filename, g_strerror(err));
}
/*
* Write errors are reported with an console message in TShark.
*/
static void
write_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
filename, g_strerror(err));
}
static void reset_epan_mem(capture_file *cf,epan_dissect_t *edt, gboolean tree, gboolean visual) static void reset_epan_mem(capture_file *cf,epan_dissect_t *edt, gboolean tree, gboolean visual)
{ {
if (!epan_auto_reset || (cf->count < epan_auto_reset_count)) if (!epan_auto_reset || (cf->count < epan_auto_reset_count))
@ -4569,16 +4551,6 @@ static void reset_epan_mem(capture_file *cf,epan_dissect_t *edt, gboolean tree,
cf->count = 0; cf->count = 0;
} }
/*
* Report additional information for an error in command-line arguments.
*/
static void
failure_message_cont(const char *msg_format, va_list ap)
{
vfprintf(stderr, msg_format, ap);
fprintf(stderr, "\n");
}
/* /*
* Editor modelines - https://www.wireshark.org/tools/modelines.html * Editor modelines - https://www.wireshark.org/tools/modelines.html
* *

View File

@ -29,6 +29,12 @@ cmdarg_err_init(void (*err)(const char *, va_list),
/* /*
* Report an error in command-line arguments. * Report an error in command-line arguments.
*/ */
void
vcmdarg_err(const char *fmt, va_list ap)
{
print_err(fmt, ap);
}
void void
cmdarg_err(const char *fmt, ...) cmdarg_err(const char *fmt, ...)
{ {

View File

@ -30,6 +30,10 @@ cmdarg_err_init(void (*err)(const char *, va_list),
* Report an error in command-line arguments. * Report an error in command-line arguments.
*/ */
extern void extern void
vcmdarg_err(const char *fmt, va_list ap)
G_GNUC_PRINTF(1, 0);
extern void
cmdarg_err(const char *fmt, ...) cmdarg_err(const char *fmt, ...)
G_GNUC_PRINTF(1, 2); G_GNUC_PRINTF(1, 2);

View File

@ -16,10 +16,59 @@
#include <wiretap/wtap.h> #include <wiretap/wtap.h>
#include <wsutil/filesystem.h> #include <wsutil/filesystem.h>
#include <wsutil/report_message.h>
#include <ui/cmdarg_err.h> #include <ui/cmdarg_err.h>
#include "ui/failure_message.h" #include "ui/failure_message.h"
/*
* Generic error message.
*/
void
failure_message(const char *msg_format, va_list ap)
{
vcmdarg_err(msg_format, ap);
}
/*
* Error message for a failed attempt to open or create a file
* other than a capture file.
* "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno; "for_writing" is TRUE if we're opening
* the file for writing and FALSE if we're opening it for reading.
*/
void
open_failure_message(const char *filename, int err, gboolean for_writing)
{
cmdarg_err(file_open_error_message(err, for_writing), filename);
}
/*
* Error message for a failed attempt to read from a file other than
* a capture file.
* "filename" is the name of the file being read from; "err" is assumed
* to be a UNIX-style errno.
*/
void
read_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
filename, g_strerror(err));
}
/*
* Error message for a failed attempt to write to a file other than
* a capture file.
* "filename" is the name of the file being written to; "err" is assumed
* to be a UNIX-style errno.
*/
void
write_failure_message(const char *filename, int err)
{
cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
filename, g_strerror(err));
}
static char * static char *
input_file_description(const char *fname) input_file_description(const char *fname)
{ {
@ -52,14 +101,12 @@ output_file_description(const char *fname)
/* /*
* Error message for a failed attempt to open a capture file for reading. * Error message for a failed attempt to open a capture file for reading.
* "progname" is the name of the program trying to open the file;
* "filename" is the name of the file being opened; "err" is assumed * "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed * to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed
* to be a string giving further information for some WTAP_ERR_ values. * to be a string giving further information for some WTAP_ERR_ values.
*/ */
void void
cfile_open_failure_message(const char *progname, const char *filename, cfile_open_failure_message(const char *filename, int err, gchar *err_info)
int err, gchar *err_info)
{ {
if (err < 0) { if (err < 0) {
/* /*
@ -77,25 +124,25 @@ cfile_open_failure_message(const char *progname, const char *filename,
case WTAP_ERR_RANDOM_OPEN_PIPE: case WTAP_ERR_RANDOM_OPEN_PIPE:
cmdarg_err("The %s is a pipe or FIFO; %s can't read pipe or FIFO files in two-pass mode.", cmdarg_err("The %s is a pipe or FIFO; %s can't read pipe or FIFO files in two-pass mode.",
file_description, progname); file_description, get_friendly_program_name());
break; break;
case WTAP_ERR_FILE_UNKNOWN_FORMAT: case WTAP_ERR_FILE_UNKNOWN_FORMAT:
cmdarg_err("The %s isn't a capture file in a format %s understands.", cmdarg_err("The %s isn't a capture file in a format %s understands.",
file_description, progname); file_description, get_friendly_program_name());
break; break;
case WTAP_ERR_UNSUPPORTED: case WTAP_ERR_UNSUPPORTED:
cmdarg_err("The %s contains record data that %s doesn't support.\n" cmdarg_err("The %s contains record data that %s doesn't support.\n"
"(%s)", "(%s)",
file_description, progname, file_description, get_friendly_program_name(),
err_info != NULL ? err_info : "no information supplied"); err_info != NULL ? err_info : "no information supplied");
g_free(err_info); g_free(err_info);
break; break;
case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED: case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
cmdarg_err("The %s is a capture for a network type that %s doesn't support.", cmdarg_err("The %s is a capture for a network type that %s doesn't support.",
file_description, progname); file_description, get_friendly_program_name());
break; break;
case WTAP_ERR_BAD_FILE: case WTAP_ERR_BAD_FILE:
@ -153,7 +200,6 @@ cfile_open_failure_message(const char *progname, const char *filename,
/* /*
* Error message for a failed attempt to open a capture file for writing. * Error message for a failed attempt to open a capture file for writing.
* "progname" is the name of the program trying to open the file;
* "filename" is the name of the file being opened; "err" is assumed * "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed * to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed
* to be a string giving further information for some WTAP_ERR_ values; * to be a string giving further information for some WTAP_ERR_ values;
@ -161,8 +207,7 @@ cfile_open_failure_message(const char *progname, const char *filename,
* and subtype of file being opened. * and subtype of file being opened.
*/ */
void void
cfile_dump_open_failure_message(const char *progname, const char *filename, cfile_dump_open_failure_message(const char *filename, int err, gchar *err_info,
int err, gchar *err_info,
int file_type_subtype) int file_type_subtype)
{ {
if (err < 0) { if (err < 0) {
@ -187,7 +232,7 @@ cfile_dump_open_failure_message(const char *progname, const char *filename,
case WTAP_ERR_UNWRITABLE_FILE_TYPE: case WTAP_ERR_UNWRITABLE_FILE_TYPE:
cmdarg_err("%s doesn't support writing capture files in that format.", cmdarg_err("%s doesn't support writing capture files in that format.",
progname); get_friendly_program_name());
break; break;
case WTAP_ERR_UNWRITABLE_ENCAP: case WTAP_ERR_UNWRITABLE_ENCAP:
@ -235,14 +280,12 @@ cfile_dump_open_failure_message(const char *progname, const char *filename,
/* /*
* Error message for a failed attempt to read from a capture file. * Error message for a failed attempt to read from a capture file.
* "progname" is the name of the program trying to open the file;
* "filename" is the name of the file being opened; "err" is assumed * "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed * to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed
* to be a string giving further information for some WTAP_ERR_ values. * to be a string giving further information for some WTAP_ERR_ values.
*/ */
void void
cfile_read_failure_message(const char *progname, const char *filename, cfile_read_failure_message(const char *filename, int err, gchar *err_info)
int err, gchar *err_info)
{ {
char *file_string; char *file_string;
@ -254,7 +297,7 @@ cfile_read_failure_message(const char *progname, const char *filename,
case WTAP_ERR_UNSUPPORTED: case WTAP_ERR_UNSUPPORTED:
cmdarg_err("The %s contains record data that %s doesn't support.\n" cmdarg_err("The %s contains record data that %s doesn't support.\n"
"(%s)", "(%s)",
file_string, progname, file_string, get_friendly_program_name(),
err_info != NULL ? err_info : "no information supplied"); err_info != NULL ? err_info : "no information supplied");
g_free(err_info); g_free(err_info);
break; break;
@ -305,7 +348,6 @@ cfile_read_failure_message(const char *progname, const char *filename,
/* /*
* Error message for a failed attempt to write to a capture file. * Error message for a failed attempt to write to a capture file.
* "progname" is the name of the program trying to open the file;
* "in_filename" is the name of the file from which the record * "in_filename" is the name of the file from which the record
* being written came; "out_filename" is the name of the file to * being written came; "out_filename" is the name of the file to
* which we're writing; "err" is assumed "err" is assumed to be a * which we're writing; "err" is assumed "err" is assumed to be a
@ -316,8 +358,8 @@ cfile_read_failure_message(const char *progname, const char *filename,
* for the type and subtype of file being written. * for the type and subtype of file being written.
*/ */
void void
cfile_write_failure_message(const char *progname, const char *in_filename, cfile_write_failure_message(const char *in_filename, const char *out_filename,
const char *out_filename, int err, gchar *err_info, int err, gchar *err_info,
guint32 framenum, int file_type_subtype) guint32 framenum, int file_type_subtype)
{ {
char *in_file_string; char *in_file_string;
@ -368,7 +410,7 @@ cfile_write_failure_message(const char *progname, const char *in_filename,
* and report the frame number and file type/subtype. * and report the frame number and file type/subtype.
*/ */
cmdarg_err("Frame%s is larger than %s supports in a \"%s\" file.", cmdarg_err("Frame%s is larger than %s supports in a \"%s\" file.",
in_frame_string, progname, in_frame_string, get_friendly_program_name(),
wtap_file_type_subtype_name(file_type_subtype)); wtap_file_type_subtype_name(file_type_subtype));
break; break;

View File

@ -16,44 +16,69 @@
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
/*
* Generic error message.
*/
extern void failure_message(const char *msg_format, va_list ap);
/*
* Error message for a failed attempt to open or create a file
* other than a capture file.
* "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno; "for_writing" is TRUE if we're opening
* the file for writing and FALSE if we're opening it for reading.
*/
extern void open_failure_message(const char *filename, int err,
gboolean for_writing);
/*
* Error message for a failed attempt to read from a file other than
* a capture file.
* "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno.
*/
extern void read_failure_message(const char *filename, int err);
/*
* Error message for a failed attempt to write to a file other than
* a capture file.
* "filename" is the name of the file being written to; "err" is assumed
* to be a UNIX-style errno.
*/
extern void write_failure_message(const char *filename, int err);
/* /*
* Error message for a failed attempt to open a capture file for input. * Error message for a failed attempt to open a capture file for input.
* "progname" is the name of the program trying to open the file;
* "filename" is the name of the file being opened; "err" is assumed * "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed * to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed
* to be a string giving further information for some WTAP_ERR_ values. * to be a string giving further information for some WTAP_ERR_ values.
*/ */
extern void cfile_open_failure_message(const char *progname, extern void cfile_open_failure_message(const char *filename, int err,
const char *filename, int err,
gchar *err_info); gchar *err_info);
/* /*
* "progname" is the name of the program trying to open the file; * Error message for a failed attempt to open a capture file for output.
* "filename" is the name of the file being opened; "err" is assumed * "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed * to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed
* to be a string giving further information for some WTAP_ERR_ values; * to be a string giving further information for some WTAP_ERR_ values;
* "file_type_subtype" is a WTAP_FILE_TYPE_SUBTYPE_ value for the type * "file_type_subtype" is a WTAP_FILE_TYPE_SUBTYPE_ value for the type
* and subtype of file being opened. * and subtype of file being opened.
*/ */
extern void cfile_dump_open_failure_message(const char *progname, extern void cfile_dump_open_failure_message(const char *filename, int err,
const char *filename, int err,
gchar *err_info, gchar *err_info,
int file_type_subtype); int file_type_subtype);
/* /*
* Error message for a failed attempt to read from a capture file. * Error message for a failed attempt to read from a capture file.
* "progname" is the name of the program trying to open the file;
* "filename" is the name of the file being opened; "err" is assumed * "filename" is the name of the file being opened; "err" is assumed
* to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed * to be a UNIX-style errno or a WTAP_ERR_ value; "err_info" is assumed
* to be a string giving further information for some WTAP_ERR_ values. * to be a string giving further information for some WTAP_ERR_ values.
*/ */
extern void cfile_read_failure_message(const char *progname, extern void cfile_read_failure_message(const char *filename, int err,
const char *filename, int err,
gchar *err_info); gchar *err_info);
/* /*
* Error message for a failed attempt to write to a capture file. * Error message for a failed attempt to write to a capture file.
* "progname" is the name of the program trying to open the file;
* "in_filename" is the name of the file from which the record * "in_filename" is the name of the file from which the record
* being written came; "out_filename" is the name of the file to * being written came; "out_filename" is the name of the file to
* which we're writing; "err" is assumed "err" is assumed to be a * which we're writing; "err" is assumed "err" is assumed to be a
@ -63,8 +88,7 @@ extern void cfile_read_failure_message(const char *progname,
* occurred; "file_type_subtype" is a WTAP_FILE_TYPE_SUBTYPE_ value * occurred; "file_type_subtype" is a WTAP_FILE_TYPE_SUBTYPE_ value
* for the type and subtype of file being written. * for the type and subtype of file being written.
*/ */
extern void cfile_write_failure_message(const char *progname, extern void cfile_write_failure_message(const char *in_filename,
const char *in_filename,
const char *out_filename, const char *out_filename,
int err, gchar *err_info, int err, gchar *err_info,
guint32 framenum, guint32 framenum,

View File

@ -465,6 +465,18 @@ int main(int argc, char *qt_argv[])
#endif #endif
/* Start time in microseconds */ /* Start time in microseconds */
guint64 start_time = g_get_monotonic_time(); guint64 start_time = g_get_monotonic_time();
static const struct report_message_routines wireshark_report_routines = {
vfailure_alert_box,
vwarning_alert_box,
open_failure_alert_box,
read_failure_alert_box,
write_failure_alert_box,
cfile_open_failure_alert_box,
cfile_dump_open_failure_alert_box,
cfile_read_failure_alert_box,
cfile_write_failure_alert_box,
cfile_close_failure_alert_box
};
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
/* /*
@ -728,9 +740,7 @@ int main(int argc, char *qt_argv[])
capture_opts_init(&global_capture_opts); capture_opts_init(&global_capture_opts);
#endif #endif
init_report_message(vfailure_alert_box, vwarning_alert_box, init_report_message("Wireshark", &wireshark_report_routines);
open_failure_alert_box, read_failure_alert_box,
write_failure_alert_box);
/* /*
* Libwiretap must be initialized before libwireshark is, so that * Libwiretap must be initialized before libwireshark is, so that

View File

@ -21,23 +21,15 @@
#include <glib.h> #include <glib.h>
#include "report_message.h" #include "report_message.h"
static void (*vreport_failure_func)(const char *, va_list); static const char *friendly_program_name;
static void (*vreport_warning_func)(const char *, va_list); static const struct report_message_routines *routines;
static void (*report_open_failure_func)(const char *, int, gboolean);
static void (*report_read_failure_func)(const char *, int);
static void (*report_write_failure_func)(const char *, int);
void init_report_message(void (*vreport_failure_fcn_p)(const char *, va_list), void
void (*vreport_warning_fcn_p)(const char *, va_list), init_report_message(const char *friendly_program_name_arg,
void (*report_open_failure_fcn_p)(const char *, int, gboolean), const struct report_message_routines *routines_arg)
void (*report_read_failure_fcn_p)(const char *, int),
void (*report_write_failure_fcn_p)(const char *, int))
{ {
vreport_failure_func = vreport_failure_fcn_p; friendly_program_name = friendly_program_name_arg;
vreport_warning_func = vreport_warning_fcn_p; routines = routines_arg;
report_open_failure_func = report_open_failure_fcn_p;
report_read_failure_func = report_read_failure_fcn_p;
report_write_failure_func = report_write_failure_fcn_p;
} }
/* /*
@ -49,7 +41,7 @@ report_failure(const char *msg_format, ...)
va_list ap; va_list ap;
va_start(ap, msg_format); va_start(ap, msg_format);
(*vreport_failure_func)(msg_format, ap); (*routines->vreport_failure)(msg_format, ap);
va_end(ap); va_end(ap);
} }
@ -62,7 +54,7 @@ report_warning(const char *msg_format, ...)
va_list ap; va_list ap;
va_start(ap, msg_format); va_start(ap, msg_format);
(*vreport_warning_func)(msg_format, ap); (*routines->vreport_warning)(msg_format, ap);
va_end(ap); va_end(ap);
} }
@ -76,7 +68,7 @@ void
report_open_failure(const char *filename, int err, report_open_failure(const char *filename, int err,
gboolean for_writing) gboolean for_writing)
{ {
(*report_open_failure_func)(filename, err, for_writing); (*routines->report_open_failure)(filename, err, for_writing);
} }
/* /*
@ -86,7 +78,7 @@ report_open_failure(const char *filename, int err,
void void
report_read_failure(const char *filename, int err) report_read_failure(const char *filename, int err)
{ {
(*report_read_failure_func)(filename, err); (*routines->report_read_failure)(filename, err);
} }
/* /*
@ -96,7 +88,65 @@ report_read_failure(const char *filename, int err)
void void
report_write_failure(const char *filename, int err) report_write_failure(const char *filename, int err)
{ {
(*report_write_failure_func)(filename, err); (*routines->report_write_failure)(filename, err);
}
/*
* Report an error from opening a capture file for reading.
*/
void
report_cfile_open_failure(const char *filename, int err, gchar *err_info)
{
(*routines->report_cfile_open_failure)(filename, err, err_info);
}
/*
* Report an error from opening a capture file for writing.
*/
void
report_cfile_dump_open_failure(const char *filename,
int err, gchar *err_info, int file_type_subtype)
{
(*routines->report_cfile_dump_open_failure)(filename,
err, err_info, file_type_subtype);
}
/*
* Report an error from attempting to read from a capture file.
*/
void
report_cfile_read_failure(const char *filename, int err, gchar *err_info)
{
(*routines->report_cfile_read_failure)(filename, err, err_info);
}
/*
* Report an error from attempting to write to a capture file.
*/
void
report_cfile_write_failure(const char *in_filename, const char *out_filename,
int err, gchar *err_info, guint32 framenum, int file_type_subtype)
{
(*routines->report_cfile_write_failure)(in_filename, out_filename,
err, err_info, framenum, file_type_subtype);
}
/*
* Report an error from closing a capture file open for writing.
*/
void
report_cfile_close_failure(const char *filename, int err, gchar *err_info)
{
(*routines->report_cfile_close_failure)(filename, err, err_info);
}
/*
* Return the "friendly" program name.
*/
const char *
get_friendly_program_name(void)
{
return friendly_program_name;
} }
/* /*

View File

@ -29,12 +29,22 @@ extern "C" {
/* /*
* Initialize the report message routines * Initialize the report message routines
*/ */
WS_DLL_PUBLIC void init_report_message( struct report_message_routines {
void (*vreport_failure)(const char *, va_list), void (*vreport_failure)(const char *, va_list);
void (*vreport_warning)(const char *, va_list), void (*vreport_warning)(const char *, va_list);
void (*report_open_failure)(const char *, int, gboolean), void (*report_open_failure)(const char *, int, gboolean);
void (*report_read_failure)(const char *, int), void (*report_read_failure)(const char *, int);
void (*report_write_failure)(const char *, int)); void (*report_write_failure)(const char *, int);
void (*report_cfile_open_failure)(const char *, int, gchar *);
void (*report_cfile_dump_open_failure)(const char *, int, gchar *, int);
void (*report_cfile_read_failure)(const char *, int, gchar *);
void (*report_cfile_write_failure)(const char *, const char *,
int, gchar *, guint32, int);
void (*report_cfile_close_failure)(const char *, int, gchar *);
};
WS_DLL_PUBLIC void init_report_message(const char *friendly_program_name,
const struct report_message_routines *routines);
/* /*
* Report a general error. * Report a general error.
@ -67,6 +77,42 @@ WS_DLL_PUBLIC void report_read_failure(const char *filename, int err);
*/ */
WS_DLL_PUBLIC void report_write_failure(const char *filename, int err); WS_DLL_PUBLIC void report_write_failure(const char *filename, int err);
/*
* Report an error from opening a capture file for reading.
*/
WS_DLL_PUBLIC void report_cfile_open_failure(const char *filename,
int err, gchar *err_info);
/*
* Report an error from opening a capture file for writing.
*/
WS_DLL_PUBLIC void report_cfile_dump_open_failure(const char *filename,
int err, gchar *err_info, int file_type_subtype);
/*
* Report an error from attempting to read from a capture file.
*/
WS_DLL_PUBLIC void report_cfile_read_failure(const char *filename,
int err, gchar *err_info);
/*
* Report an error from attempting to write to a capture file.
*/
WS_DLL_PUBLIC void report_cfile_write_failure(const char *in_filename,
const char *out_filename, int err, gchar *err_info, guint32 framenum,
int file_type_subtype);
/*
* Report an error from closing a capture file open for writing.
*/
WS_DLL_PUBLIC void report_cfile_close_failure(const char *filename,
int err, gchar *err_info);
/*
* Return the "friendly" program name.
*/
WS_DLL_PUBLIC const char *get_friendly_program_name(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */