From c33e2f7b51f9e14f99f6b6d9018ac41b7e97d5a6 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Mon, 15 Mar 2021 11:29:43 -0700 Subject: 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. --- rawshark.c | 66 +++++++++++++------------------------------------------------- 1 file changed, 14 insertions(+), 52 deletions(-) (limited to 'rawshark.c') diff --git a/rawshark.c b/rawshark.c index 23fc53bcb7..8e3d2fa33d 100644 --- a/rawshark.c +++ b/rawshark.c @@ -144,11 +144,6 @@ static gboolean process_packet(capture_file *cf, epan_dissect_t *edt, gint64 off wtap_rec *rec, Buffer *buf); 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_cont(const char *fmt, va_list ap); 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" 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 @@ -501,9 +508,7 @@ main(int argc, char *argv[]) (GLogLevelFlags)log_flags, log_func_ignore, NULL /* user_data */); - init_report_message(failure_warning_message, failure_warning_message, - open_failure_message, read_failure_message, - write_failure_message); + init_report_message("rawshark", &rawshark_report_routines); timestamp_set_type(TS_RELATIVE); timestamp_set_precision(TS_PREC_AUTO); @@ -966,7 +971,7 @@ load_cap_file(capture_file *cf) ws_buffer_free(&buf); if (err != 0) { /* 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; } @@ -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 * 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; } -/* - * 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. */ -- cgit v1.2.3