diff options
-rw-r--r-- | gtk/file_dlg.c | 58 | ||||
-rw-r--r-- | gtk/simple_dialog.c | 5 | ||||
-rw-r--r-- | merge.c | 21 |
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; @@ -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; } |