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
This commit is contained in:
Guy Harris 2004-10-27 23:45:10 +00:00
parent b48b8847b1
commit d9bdadc4dd
4 changed files with 38 additions and 101 deletions

60
file.c
View File

@ -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_in_file_t *in_files;
merge_out_file_t out_file;
int err, close_err;
gchar *err_info;
int err_fileno;
gboolean ret;
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:
/* 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);
return FALSE;
/* XXX - what about read failures? */
case MERGE_WRITE_FAILED:
cf_write_failure_alert_box(out_file, err);
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;
}
return TRUE;
/* 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);
if (!ret)
cf_write_failure_alert_box(out_filename, err);
return ret;
}
gboolean

4
file.h
View File

@ -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 *);

49
merge.c
View 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;
}

26
merge.h
View File

@ -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 */