aboutsummaryrefslogtreecommitdiffstats
path: root/mergecap.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2017-04-20 13:25:21 -0700
committerGuy Harris <guy@alum.mit.edu>2017-04-20 20:25:59 +0000
commit64ec2b2e5ed590a6f1a3d22c8b24a6e70420d1f9 (patch)
treeaab752fe44790898535c850d89e015b75b569149 /mergecap.c
parent2e6cb9dbab154531b306e472642ff6033f0e341c (diff)
Take the error message generation out of the merge_files routines.
Have them just return the information needed for the caller to produce an error message, and have the callers use the new cfile_ routines for reporting errors. This requires that the "write failure alert box" routine take the *input* file name as an argument, so that, on a merge, if the problem is that a record from a given input file can't be written out to the type of output file we're generating, the input file name can be given, along with the record number in that file. Change-Id: If5a5e00539e7e652008a523dec92c0b359a48e71 Reviewed-on: https://code.wireshark.org/review/21257 Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'mergecap.c')
-rw-r--r--mergecap.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/mergecap.c b/mergecap.c
index daddbda1fb..74f733fa1b 100644
--- a/mergecap.c
+++ b/mergecap.c
@@ -63,6 +63,8 @@
#include <wsutil/unicode-utils.h>
#endif /* _WIN32 */
+#include "ui/failure_message.h"
+
/*
* Show the usage
*/
@@ -262,6 +264,7 @@ main(int argc, char *argv[])
int err = 0;
gchar *err_info = NULL;
int err_fileno;
+ guint32 err_framenum;
char *out_filename = NULL;
merge_result status = MERGE_OK;
idb_merge_mode mode = IDB_MERGE_MODE_MAX;
@@ -441,13 +444,13 @@ main(int argc, char *argv[])
(const char *const *) &argv[optind],
in_file_count, do_append, mode, snaplen,
"mergecap", verbose ? &cb : NULL,
- &err, &err_info, &err_fileno);
+ &err, &err_info, &err_fileno, &err_framenum);
} else {
/* merge the files to the outfile */
status = merge_files(out_filename, file_type,
(const char *const *) &argv[optind], in_file_count,
do_append, mode, snaplen, "mergecap", verbose ? &cb : NULL,
- &err, &err_info, &err_fileno);
+ &err, &err_info, &err_fileno, &err_framenum);
}
switch (status) {
@@ -460,26 +463,36 @@ main(int argc, char *argv[])
break;
case MERGE_ERR_CANT_OPEN_INFILE:
- fprintf(stderr, "mergecap: Can't open %s: %s (%s)\n", argv[optind + err_fileno],
- wtap_strerror(err), err_info ? err_info : "no more information");
+ cfile_open_failure_message("mergecap", argv[optind + err_fileno],
+ err, err_info);
break;
case MERGE_ERR_CANT_OPEN_OUTFILE:
- if (use_stdout) {
- fprintf(stderr, "mergecap: Can't set up the standard output: %s\n",
- wtap_strerror(err));
- } else {
- fprintf(stderr, "mergecap: Can't open or create %s: %s\n", out_filename,
- wtap_strerror(err));
- }
+ cfile_dump_open_failure_message("mergecap", out_filename, err, file_type);
+ break;
+
+ case MERGE_ERR_CANT_READ_INFILE:
+ cfile_read_failure_message("mergecap", argv[optind + err_fileno],
+ err, err_info);
break;
- case MERGE_ERR_CANT_READ_INFILE: /* fall through */
case MERGE_ERR_BAD_PHDR_INTERFACE_ID:
+ cmdarg_err("Record %u of \"%s\" has an interface ID that does not match any IDB in its file.",
+ err_framenum, argv[optind + err_fileno]);
+ break;
+
case MERGE_ERR_CANT_WRITE_OUTFILE:
+ cfile_write_failure_message("mergecap", argv[optind + err_fileno],
+ out_filename, err, err_info, err_framenum,
+ file_type);
+ break;
+
case MERGE_ERR_CANT_CLOSE_OUTFILE:
+ cfile_close_failure_message(out_filename, err);
+ break;
+
default:
- fprintf(stderr, "mergecap: %s\n", err_info ? err_info : "unknown error");
+ cmdarg_err("Unknown merge_files error %d", status);
break;
}