diff options
-rw-r--r-- | file.c | 60 | ||||
-rw-r--r-- | file.h | 4 | ||||
-rw-r--r-- | merge.c | 49 | ||||
-rw-r--r-- | merge.h | 26 |
4 files changed, 38 insertions, 101 deletions
@@ -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 @@ -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 *); @@ -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; -} @@ -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 */ |