/** Close the input files again. * * @param in_file_count number of entries in in_files * @param in_files input file array to be closed */ static void merge_close_in_files(int in_file_count, merge_in_file_t in_files[]) { int i; for (i = 0; i < in_file_count; i++) { cleanup_in_file(&in_files[i]); } }
/** Open a number of input files to merge. * * @param in_file_count number of entries in in_file_names and in_files * @param in_file_names filenames of the input files * @param in_files input file array to be filled (>= sizeof(merge_in_file_t) * in_file_count) * @param err wiretap error, if failed * @param err_info wiretap error string, if failed * @param err_fileno file on which open failed, if failed * @return TRUE if all files could be opened, FALSE otherwise */ static gboolean merge_open_in_files(guint in_file_count, const char *const *in_file_names, merge_in_file_t **in_files, merge_progress_callback_t* cb, int *err, gchar **err_info, guint *err_fileno) { guint i; guint j; size_t files_size = in_file_count * sizeof(merge_in_file_t); merge_in_file_t *files; gint64 size; files = (merge_in_file_t *)g_malloc0(files_size); *in_files = files; for (i = 0; i < in_file_count; i++) { files[i].filename = in_file_names[i]; files[i].wth = wtap_open_offline(in_file_names[i], WTAP_TYPE_AUTO, err, err_info, FALSE); files[i].data_offset = 0; files[i].state = PACKET_NOT_PRESENT; files[i].packet_num = 0; if (!files[i].wth) { /* Close the files we've already opened. */ for (j = 0; j < i; j++) cleanup_in_file(&files[j]); *err_fileno = i; return FALSE; } size = wtap_file_size(files[i].wth, err); if (size == -1) { for (j = 0; j != G_MAXUINT && j <= i; j++) cleanup_in_file(&files[j]); *err_fileno = i; return FALSE; } files[i].size = size; files[i].idb_index_map = g_array_new(FALSE, FALSE, sizeof(guint)); } if (cb) cb->callback_func(MERGE_EVENT_INPUT_FILES_OPENED, 0, files, in_file_count, cb->data); return TRUE; }
/* * Scan through the arguments and open the input files */ gboolean merge_open_in_files(int in_file_count, const char *const *in_file_names, merge_in_file_t **in_files, int *err, gchar **err_info, int *err_fileno) { gint i; gint j; size_t files_size = in_file_count * sizeof(merge_in_file_t); merge_in_file_t *files; gint64 size; files = (merge_in_file_t *)g_malloc0(files_size); *in_files = files; for (i = 0; i < in_file_count; i++) { files[i].filename = in_file_names[i]; files[i].wth = wtap_open_offline(in_file_names[i], WTAP_TYPE_AUTO, err, err_info, FALSE); files[i].data_offset = 0; files[i].state = PACKET_NOT_PRESENT; files[i].packet_num = 0; if (!files[i].wth) { /* Close the files we've already opened. */ for (j = 0; j < i; j++) cleanup_in_file(&files[j]); *err_fileno = i; return FALSE; } size = wtap_file_size(files[i].wth, err); if (size == -1) { for (j = 0; j + 1 > j && j <= i; j++) cleanup_in_file(&files[j]); *err_fileno = i; return FALSE; } files[i].size = size; files[i].idb_index_map = g_array_new(FALSE, FALSE, sizeof(guint)); } return TRUE; }