aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Lamping <ulf.lamping@web.de>2004-06-18 07:41:21 +0000
committerUlf Lamping <ulf.lamping@web.de>2004-06-18 07:41:21 +0000
commitfa46f7a6db760d5cd48599f13d6dfaceeb8a04fa (patch)
tree15d7d995edd5c0659ebbf3985f5810faac058154
parent0657cbad2efd6e2dbfacb7f0cdbef1c718d6f778 (diff)
merge: bugfixes and code cleanup
svn path=/trunk/; revision=11175
-rw-r--r--gtk/file_dlg.c58
-rw-r--r--gtk/simple_dialog.c5
-rw-r--r--merge.c21
3 files changed, 44 insertions, 40 deletions
diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c
index bbefdd69a5..540e352e24 100644
--- a/gtk/file_dlg.c
+++ b/gtk/file_dlg.c
@@ -1,7 +1,7 @@
/* file_dlg.c
* Dialog boxes for handling files
*
- * $Id: file_dlg.c,v 1.112 2004/06/18 05:58:30 ulfl Exp $
+ * $Id: file_dlg.c,v 1.113 2004/06/18 07:41:21 ulfl Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -551,11 +551,11 @@ file_merge_cmd(GtkWidget *w)
static void file_merge_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_)
{
switch(btn) {
- case(ESD_BTN_YES):
+ case(ESD_BTN_OK):
/* save file first */
file_save_as_cmd(after_save_merge_dialog, data);
break;
- case(ESD_BTN_NO):
+ case(ESD_BTN_CANCEL):
break;
default:
g_assert_not_reached();
@@ -568,7 +568,7 @@ file_merge_cmd_cb(GtkWidget *widget, gpointer data _U_) {
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
/* user didn't saved his current file, ask him */
- dialog = simple_dialog(ESD_TYPE_CONFIRMATION, ESD_BTNS_YES_NO,
+ dialog = simple_dialog(ESD_TYPE_CONFIRMATION, ESD_BTNS_OK_CANCEL,
PRIMARY_TEXT_START "Save the capture file before merging to another one?" PRIMARY_TEXT_END "\n\n"
"A temporary capture file cannot be merged.");
simple_dialog_set_cb(dialog, file_merge_answered_cb, widget);
@@ -580,12 +580,12 @@ file_merge_cmd_cb(GtkWidget *widget, gpointer data _U_) {
extern gboolean
-merge_two_files(char *out_filename, char *in_file0, char *in_file1, gboolean append);
+merge_two_files(char *out_filename, char *in_file0, char *in_file1, gboolean append, int *err);
static void
file_merge_ok_cb(GtkWidget *w, gpointer fs) {
gchar *cf_name, *rfilter, *s;
- gchar *cf_current_name, *cf_merged_name;
+ gchar *cf_merged_name;
GtkWidget *filter_te, *rb;
dfilter_t *rfcode = NULL;
int err;
@@ -615,46 +615,52 @@ file_merge_ok_cb(GtkWidget *w, gpointer fs) {
return;
}
- cf_current_name = g_strdup(cfile.filename);
- /*XXX should use temp file stuff in util routines */
- cf_merged_name = tmpnam(NULL);
+ /*XXX should use temp file stuff in util routines? */
+ cf_merged_name = g_strdup(tmpnam(NULL));
- /* merge or append the files */
+ /* merge or append the two files */
rb = OBJECT_GET_DATA(w, E_MERGE_CHRONO_KEY);
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (rb))) {
/* chonological order */
- merge_ok = merge_two_files(cf_merged_name, cf_current_name, cf_name, FALSE);
+ merge_ok = merge_two_files(cf_merged_name, cfile.filename, cf_name, FALSE, &err);
} else {
rb = OBJECT_GET_DATA(w, E_MERGE_PREPEND_KEY);
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (rb))) {
/* prepend file */
- merge_ok = merge_two_files(cf_merged_name, cf_current_name, cf_name, TRUE);
+ merge_ok = merge_two_files(cf_merged_name, cfile.filename, cf_name, TRUE, &err);
} else {
/* append file */
- merge_ok = merge_two_files(cf_merged_name, cf_name, cf_current_name, TRUE);
+ merge_ok = merge_two_files(cf_merged_name, cf_name, cfile.filename, TRUE, &err);
}
}
- cf_close(&cfile);
- g_free(cf_current_name);
- cf_name = cf_merged_name;
+ g_free(cf_name);
if(!merge_ok) {
+ /* merge failed */
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+ "An error occurred while merging the files: %s.",
+ wtap_strerror(err));
if (rfcode != NULL)
dfilter_free(rfcode);
- g_free(cf_name);
+ g_free(cf_merged_name);
return;
}
- /* Try to open the capture file. */
- if ((err = cf_open(cf_name, FALSE, &cfile)) != 0) {
+ cf_close(&cfile);
+
+ /* We've crossed the Rubicon; get rid of the file selection box. */
+ window_destroy(GTK_WIDGET (fs));
+
+ /* Try to open the merged capture file. */
+ if ((err = cf_open(cf_merged_name, TRUE /* temporary file */, &cfile)) != 0) {
/* We couldn't open it; don't dismiss the open dialog box,
just leave it around so that the user can, after they
dismiss the alert box popped up for the open error,
try again. */
if (rfcode != NULL)
dfilter_free(rfcode);
- g_free(cf_name);
+ g_free(cf_merged_name);
return;
}
@@ -662,10 +668,6 @@ file_merge_ok_cb(GtkWidget *w, gpointer fs) {
it closed the previous capture file, and thus destroyed any
previous read filter attached to "cf"). */
cfile.rfcode = rfcode;
- cfile.is_tempfile = TRUE;
-
- /* We've crossed the Rubicon; get rid of the file selection box. */
- window_destroy(GTK_WIDGET (fs));
switch (cf_read(&cfile)) {
@@ -681,18 +683,18 @@ file_merge_ok_cb(GtkWidget *w, gpointer fs) {
capture file has been closed - just free the capture file name
string and return (without changing the last containing
directory). */
- g_free(cf_name);
+ g_free(cf_merged_name);
return;
}
/* Save the name of the containing directory specified in the path name,
- if any; we can write over cf_name, which is a good thing, given that
+ if any; we can write over cf_merged_name, which is a good thing, given that
"get_dirname()" does write over its argument. */
- s = get_dirname(cf_name);
+ s = get_dirname(cf_merged_name);
set_last_open_dir(s);
gtk_widget_grab_focus(packet_list);
- g_free(cf_name);
+ g_free(cf_merged_name);
}
static void
diff --git a/gtk/simple_dialog.c b/gtk/simple_dialog.c
index c27f7f040e..987b503a52 100644
--- a/gtk/simple_dialog.c
+++ b/gtk/simple_dialog.c
@@ -1,7 +1,7 @@
/* simple_dialog.c
* Simple message dialog box routines.
*
- * $Id: simple_dialog.c,v 1.37 2004/06/17 21:34:12 ulfl Exp $
+ * $Id: simple_dialog.c,v 1.38 2004/06/18 07:41:21 ulfl Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -167,6 +167,9 @@ display_simple_dialog(gint type, gint btn_mask, char *message)
case(ESD_BTN_OK):
bbox = dlg_button_row_new(GTK_STOCK_OK, NULL);
break;
+ case(ESD_BTN_OK | ESD_BTN_CANCEL):
+ bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
+ break;
case(ESD_BTN_CLEAR | ESD_BTN_CANCEL):
bbox = dlg_button_row_new(GTK_STOCK_CLEAR, GTK_STOCK_CANCEL, NULL);
break;
diff --git a/merge.c b/merge.c
index c91b4b18a7..1968d245f0 100644
--- a/merge.c
+++ b/merge.c
@@ -1,6 +1,6 @@
/* Combine two dump files, either by appending or by merging by timestamp
*
- * $Id: merge.c,v 1.1 2004/06/17 21:53:25 ulfl Exp $
+ * $Id: merge.c,v 1.2 2004/06/18 07:41:20 ulfl Exp $
*
* Written by Scott Renfro <scott@renfro.org> based on
* editcap by Richard Sharpe and Guy Harris
@@ -354,11 +354,10 @@ close_in_files(int count, in_file_t in_files[])
* Scan through the arguments and open the input files
*/
static int
-open_in_files(int in_file_count, char *argv[], in_file_t *in_files[])
+open_in_files(int in_file_count, char *argv[], in_file_t *in_files[], int *err)
{
int i;
int count = 0;
- int err;
gchar *err_info;
in_file_t *files;
int files_size = in_file_count * sizeof(in_file_t);
@@ -369,14 +368,14 @@ open_in_files(int in_file_count, char *argv[], in_file_t *in_files[])
for (i = 0; i < in_file_count; i++) {
files[count].filename = argv[i];
- files[count].wth = wtap_open_offline(argv[i], &err, &err_info, FALSE);
+ files[count].wth = wtap_open_offline(argv[i], err, &err_info, FALSE);
files[count].err = 0;
files[count].data_offset = 0;
files[count].ok = TRUE;
if (!files[count].wth) {
- fprintf(stderr, "mergecap: skipping %s: %s\n", argv[i],
- wtap_strerror(err));
- switch (err) {
+ fprintf(stderr, "merge: skipping %s: %s\n", argv[i],
+ wtap_strerror(*err));
+ switch (*err) {
case WTAP_ERR_UNSUPPORTED:
case WTAP_ERR_UNSUPPORTED_ENCAP:
@@ -402,7 +401,7 @@ open_in_files(int in_file_count, char *argv[], in_file_t *in_files[])
gboolean
-merge_two_files(char *out_filename, char *in_file0, char *in_file1, gboolean do_append)
+merge_two_files(char *out_filename, char *in_file0, char *in_file1, gboolean do_append, int *err)
{
extern char *optarg;
extern int optind;
@@ -427,9 +426,9 @@ merge_two_files(char *out_filename, char *in_file0, char *in_file1, gboolean do_
in_filenames[1] = in_file1;
/* open the input files */
- in_file_count = open_in_files(in_file_count, in_filenames, &in_files);
- if (in_file_count < 1) {
- fprintf(stderr, "mergecap: No valid input files\n");
+ in_file_count = open_in_files(in_file_count, in_filenames, &in_files, err);
+ if (in_file_count < 2) {
+ fprintf(stderr, "mergecap: Not all input files valid\n");
return FALSE;
}