diff options
author | Guy Harris <guy@alum.mit.edu> | 2004-10-27 23:45:10 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2004-10-27 23:45:10 +0000 |
commit | d9bdadc4dd3d4dbaf7581b7ffd21773232003936 (patch) | |
tree | b28d0784c28eda6b511bdabc6ff147b15be12bd5 /file.c | |
parent | b48b8847b1ac3289656224831f86a5d235202455 (diff) | |
download | wireshark-d9bdadc4dd3d4dbaf7581b7ffd21773232003936.tar.gz wireshark-d9bdadc4dd3d4dbaf7581b7ffd21773232003936.tar.bz2 wireshark-d9bdadc4dd3d4dbaf7581b7ffd21773232003936.zip |
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
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 60 |
1 files changed, 36 insertions, 24 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 |