From d9bdadc4dd3d4dbaf7581b7ffd21773232003936 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Wed, 27 Oct 2004 23:45:10 +0000 Subject: Get rid of merge_n_files() - it's only called in one place now, and absorbing its logic into "cf_merge_files()" simplifies things a bit. svn path=/trunk/; revision=12421 --- file.c | 60 ++++++++++++++++++++++++++++++++++++------------------------ file.h | 4 ++-- merge.c | 49 ------------------------------------------------- merge.h | 26 -------------------------- 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 */ -- cgit v1.2.3