aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--file.c60
-rw-r--r--file.h4
-rw-r--r--merge.c49
-rw-r--r--merge.h26
4 files changed, 38 insertions, 101 deletions
diff --git a/file.c b/file.c
index f7c3f1b71d..f1a407fc51 100644
--- a/file.c
+++ b/file.c
@@ -969,37 +969,49 @@ read_packet(capture_file *cf, long offset)
}
gboolean
-cf_merge_files(const char *out_file, int out_fd, int in_file_count,
- char *const *in_filenames, int filetype, gboolean do_append)
+cf_merge_files(const char *out_filename, int out_fd, int in_file_count,
+ char *const *in_filenames, int file_type, gboolean do_append)
{
- merge_status_e merge_status;
- int err;
- gchar *err_info;
- int err_fileno;
-
- merge_status = merge_n_files(out_fd, in_file_count, in_filenames, filetype,
- do_append, &err, &err_info, &err_fileno);
-
- switch (merge_status) {
-
- case MERGE_SUCCESS:
- return TRUE;
-
- case MERGE_OPEN_INPUT_FAILED:
+ merge_in_file_t *in_files;
+ merge_out_file_t out_file;
+ int err, close_err;
+ gchar *err_info;
+ int err_fileno;
+ gboolean ret;
+
+ /* open the input files */
+ in_file_count = merge_open_in_files(in_file_count, in_filenames, &in_files,
+ &err, &err_info, &err_fileno);
+ if (in_file_count < 2) {
+ free(in_files);
cf_open_failure_alert_box(in_filenames[err_fileno], err, err_info, FALSE, 0);
return FALSE;
+ }
- case MERGE_OPEN_OUTPUT_FAILED:
- cf_open_failure_alert_box(out_file, err, err_info, TRUE, filetype);
+ if (!merge_open_outfile(&out_file, out_fd, file_type,
+ merge_select_frame_type(in_file_count, in_files),
+ merge_max_snapshot_length(in_file_count, in_files), &err)) {
+ merge_close_in_files(in_file_count, in_files);
+ free(in_files);
+ cf_open_failure_alert_box(out_filename, err, err_info, TRUE, file_type);
return FALSE;
+ }
- /* XXX - what about read failures? */
+ /* do the merge (or append) */
+ if (do_append)
+ ret = merge_append_files(in_file_count, in_files, &out_file, &err);
+ else
+ ret = merge_files(in_file_count, in_files, &out_file, &err);
- case MERGE_WRITE_FAILED:
- cf_write_failure_alert_box(out_file, err);
- return FALSE;
- }
- return TRUE;
+ merge_close_in_files(in_file_count, in_files);
+ if (ret)
+ ret = merge_close_outfile(&out_file, &err);
+ else
+ merge_close_outfile(&out_file, &close_err);
+
+ if (!ret)
+ cf_write_failure_alert_box(out_filename, err);
+ return ret;
}
gboolean
diff --git a/file.h b/file.h
index 967eeb8aaa..f3ab319bca 100644
--- a/file.h
+++ b/file.h
@@ -54,8 +54,8 @@ gboolean cf_save(char *fname, capture_file * cf, packet_range_t *range, guint sa
gchar *cf_get_display_name(capture_file *);
gboolean
-cf_merge_files(const char *out_file, int out_fd, int in_file_count,
- char *const *in_filenames, int filetype, gboolean do_append);
+cf_merge_files(const char *out_filename, int out_fd, int in_file_count,
+ char *const *in_filenames, int file_type, gboolean do_append);
gboolean filter_packets(capture_file *cf, gchar *dfilter, gboolean force);
void reftime_packets(capture_file *);
diff --git a/merge.c b/merge.c
index c1dfe0e4a4..2c7c7b566f 100644
--- a/merge.c
+++ b/merge.c
@@ -380,52 +380,3 @@ merge_open_in_files(int in_file_count, char *const *in_file_names,
return count;
}
-
-
-/*
- * Convenience function: merge two or more files into one.
- */
-merge_status_e
-merge_n_files(int out_fd, int in_file_count, char *const *in_filenames,
- int file_type, gboolean do_append, int *err, gchar **err_info,
- int *err_fileno)
-{
- merge_in_file_t *in_files = NULL;
- merge_out_file_t out_file;
- gboolean ret;
- int close_err;
-
- /* open the input files */
- in_file_count = merge_open_in_files(in_file_count, in_filenames, &in_files,
- err, err_info, err_fileno);
- if (in_file_count < 2) {
- if (merge_verbose == VERBOSE_ALL)
- fprintf(stderr, "mergecap: Not all input files valid\n");
- free(in_files);
- return MERGE_OPEN_INPUT_FAILED;
- }
-
- if (!merge_open_outfile(&out_file, out_fd, file_type,
- merge_select_frame_type(in_file_count, in_files),
- merge_max_snapshot_length(in_file_count, in_files), err)) {
- merge_close_in_files(in_file_count, in_files);
- free(in_files);
- return MERGE_OPEN_OUTPUT_FAILED;
- }
-
- /* do the merge (or append) */
- if (do_append)
- ret = merge_append_files(in_file_count, in_files, &out_file, err);
- else
- ret = merge_files(in_file_count, in_files, &out_file, err);
-
- merge_close_in_files(in_file_count, in_files);
- if (ret)
- ret = merge_close_outfile(&out_file, err);
- else
- merge_close_outfile(&out_file, &close_err);
-
- free(in_files);
-
- return ret ? MERGE_SUCCESS : MERGE_WRITE_FAILED;
-}
diff --git a/merge.h b/merge.h
index 81dff56169..3102e94f20 100644
--- a/merge.h
+++ b/merge.h
@@ -146,32 +146,6 @@ merge_files(int in_file_count, merge_in_file_t in_files[], merge_out_file_t *out
extern gboolean
merge_append_files(int in_file_count, merge_in_file_t in_files[], merge_out_file_t *out_file, int *err);
-/** Return status from merge_n_files */
-typedef enum {
- MERGE_SUCCESS,
- MERGE_OPEN_INPUT_FAILED,
- MERGE_OPEN_OUTPUT_FAILED,
- MERGE_WRITE_FAILED
-} merge_status_e;
-
-/*
- * Convenience function: merge any number of input files into one.
- *
- * @param out_filename the output filename
- * @param in_file_count number of input files
- * @param in_filenames array of input filenames
- * @param do_append TRUE to append, FALSE to merge chronologically
- * @param err wiretap error, if failed and VERBOSE_NONE
- * @param err_info wiretap error string, if failed and VERBOSE_NONE
- * @param err_fileno file on which open failed, if VERBOSE_NONE
- * @return merge_status_e
- */
-extern merge_status_e
-merge_n_files(int out_fd, int in_file_count, char *const *in_filenames,
- int filetype, gboolean do_append, int *err, gchar **err_info,
- int *err_fileno);
-
-
#ifdef __cplusplus
}
#endif /* __cplusplus */