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:
parent
b48b8847b1
commit
d9bdadc4dd
60
file.c
60
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_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
4
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 *);
|
||||
|
|
49
merge.c
49
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;
|
||||
}
|
||||
|
|
26
merge.h
26
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 */
|
||||
|
|
Loading…
Reference in New Issue