Get rid of merge_n_files() - it's only called in one place now, and
[obnox/wireshark/wip.git] / file.c
diff --git a/file.c b/file.c
index f7c3f1b71d4d0371289131e4454920d34bf5284f..f1a407fc5167a4b04f1496c5bdf6c6788bca69aa 100644 (file)
--- 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