Enhance Vendor Specific Atheros IE
[obnox/wireshark/wip.git] / file.c
diff --git a/file.c b/file.c
index 34526aed71ed84b366e4ae8c2e7e94b68d92689a..075d688f042e96024b3c36567349674a387c21ed 100644 (file)
--- a/file.c
+++ b/file.c
@@ -73,6 +73,7 @@
 #include <epan/dfilter/dfilter-macro.h>
 #include <wsutil/file_util.h>
 #include <epan/strutil.h>
+#include <epan/addr_resolv.h>
 
 #ifdef HAVE_LIBPCAP
 gboolean auto_scroll_live;
@@ -127,9 +128,7 @@ static void cf_open_failure_alert_box(const char *filename, int err,
 static const char *file_rename_error_message(int err);
 static void cf_write_failure_alert_box(const char *filename, int err);
 static void cf_close_failure_alert_box(const char *filename, int err);
-#ifdef NEW_PACKET_LIST
 static void ref_time_packets(capture_file *cf);
-#endif
 /* Update the progress bar this many times when reading a file. */
 #define N_PROGBAR_UPDATES   100
 /* We read around 200k/100ms don't update the progress bar more often than that */
@@ -141,7 +140,11 @@ static void ref_time_packets(capture_file *cf);
 #define FRAME_DATA_CHUNK_SIZE   1024
 
 
-/* this callback mechanism should possibly be replaced by the g_signal_...() stuff (if I only would know how :-) */
+/*
+ * We could probably use g_signal_...() instead of the callbacks below but that
+ * would require linking our CLI programs to libgobject and creating an object
+ * instance for the signals.
+ */
 typedef struct {
   cf_callback_t cb_fct;
   gpointer user_data;
@@ -200,9 +203,7 @@ cf_callback_remove(cf_callback_t func)
 void
 cf_timestamp_auto_precision(capture_file *cf)
 {
-#ifdef NEW_PACKET_LIST
   int i;
-#endif
   int prec = timestamp_get_precision();
 
 
@@ -243,7 +244,6 @@ cf_timestamp_auto_precision(capture_file *cf)
       g_assert_not_reached();
     }
   }
-#ifdef NEW_PACKET_LIST
   /* Set the column widths of those columns that show the time in
      "command-line-specified" format. */
   for (i = 0; i < cf->cinfo.num_cols; i++) {
@@ -251,7 +251,6 @@ cf_timestamp_auto_precision(capture_file *cf)
       new_packet_list_resize_column(i);
     }
   }
-#endif
 }
 
 gulong
@@ -350,15 +349,10 @@ cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
   g_assert(cf->plist_chunk);
 #endif
 
-#ifdef NEW_PACKET_LIST
   /* Adjust timestamp precision if auto is selected, col width will be adjusted */
   cf_timestamp_auto_precision(cf);
   /* XXX needed ? */
   new_packet_list_queue_draw();
-#else
-  /* change the time formats now, as we might have a new precision */
-  cf_change_time_formats(cf);
-#endif
   fileset_file_opened(fname);
 
   if(cf->cd_t == WTAP_FILE_BER) {
@@ -366,6 +360,9 @@ cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
     ber_set_filename(cf->filename);
   }
 
+  wtap_set_cb_new_ipv4(cf->wth, add_ipv4_name);
+  wtap_set_cb_new_ipv6(cf->wth, (wtap_new_ipv6_callback_t) add_ipv6_name);
+
   return CF_OK;
 
 fail:
@@ -428,15 +425,9 @@ cf_reset_state(capture_file *cf)
   cf->finfo_selected = NULL;
 
   /* Clear the packet list. */
-#ifdef NEW_PACKET_LIST
   new_packet_list_freeze();
   new_packet_list_clear();
   new_packet_list_thaw();
-#else
-  packet_list_freeze();
-  packet_list_clear();
-  packet_list_thaw();
-#endif
 
   cf->f_datalen = 0;
   cf->count = 0;
@@ -581,11 +572,7 @@ cf_read(capture_file *cf, gboolean from_save)
   /* Progress so far. */
   progbar_val = 0.0f;
 
-#ifdef NEW_PACKET_LIST
   new_packet_list_freeze();
-#else
-  packet_list_freeze();
-#endif
 
   stop_flag = FALSE;
   g_get_current_time(&start_time);
@@ -620,17 +607,10 @@ cf_read(capture_file *cf, gboolean from_save)
           if (progbar_quantum > 500000 || displayed_once == 0) {
             if ((auto_scroll_live || displayed_once == 0 || cf->displayed_count < 1000) && cf->plist_end != NULL) {
               displayed_once = 1;
-#ifdef NEW_PACKET_LIST
               new_packet_list_thaw();
               if (auto_scroll_live)
                 new_packet_list_moveto_end();
               new_packet_list_freeze();
-#else
-              packet_list_thaw();
-              if (auto_scroll_live)
-                packet_list_moveto_end();
-              packet_list_freeze();
-#endif /* NEW_PACKET_LIST */
             }
           }
 #endif /* HAVE_LIBPCAP */
@@ -706,11 +686,7 @@ cf_read(capture_file *cf, gboolean from_save)
   cf->current_frame = cf->first_displayed;
   cf->current_row = 0;
 
-#ifdef NEW_PACKET_LIST
   new_packet_list_thaw();
-#else
-  packet_list_thaw();
-#endif
   if (from_save == FALSE)
     cf_callback_invoke(cf_cb_file_read_finished, cf);
   else
@@ -719,11 +695,7 @@ cf_read(capture_file *cf, gboolean from_save)
   /* If we have any displayed packets to select, select the first of those
      packets by making the first row the selected row. */
   if (cf->first_displayed != NULL){
-#ifdef NEW_PACKET_LIST
     new_packet_list_select_first_row();
-#else
-    packet_list_select_row(0);
-#endif /* NEW_PACKET_LIST */
   }
 
   if(stop_flag) {
@@ -819,14 +791,9 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err)
 
   *err = 0;
 
-#ifdef NEW_PACKET_LIST
   new_packet_list_check_end();
   /* Don't freeze/thaw the list when doing live capture */
   /*new_packet_list_freeze();*/
-#else
-  packet_list_check_end();
-  packet_list_freeze();
-#endif
 
   /*g_log(NULL, G_LOG_LEVEL_MESSAGE, "cf_continue_tail: %u new: %u", cf->count, to_read);*/
 
@@ -868,12 +835,8 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err)
         /* XXX - how to avoid a busy wait? */
         /* Sleep(100); */
       };
-#ifdef NEW_PACKET_LIST
       /* Don't freeze/thaw the list when doing live capture */
       /*new_packet_list_thaw();*/
-#else
-      packet_list_thaw();
-#endif
       return CF_READ_ABORTED;
     }
     ENDTRY;
@@ -888,7 +851,6 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err)
   /*g_log(NULL, G_LOG_LEVEL_MESSAGE, "cf_continue_tail: count %u state: %u err: %u",
     cf->count, cf->state, *err);*/
 
-#ifdef NEW_PACKET_LIST
   /* Don't freeze/thaw the list when doing live capture */
   /*new_packet_list_thaw();*/
   /* With the new packet list the first packet
@@ -896,23 +858,11 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err)
    */
   if(!cf->current_frame)
     new_packet_list_select_first_row();
-#else
-  /* XXX - this causes "flickering" of the list */
-  packet_list_thaw();
-#endif
 
   /* moving to the end of the packet list - if the user requested so and
      we have some new packets. */
   if (newly_displayed_packets && auto_scroll_live && cf->plist_end != NULL)
-#ifdef NEW_PACKET_LIST
       new_packet_list_moveto_end();
-#else
-    /* this doesn't seem to work well with a frozen GTK_Clist, so do this after
-       packet_list_thaw() is done, see bugzilla 1188 */
-    /* XXX - this cheats and looks inside the packet list to find the final
-       row number. */
-    packet_list_moveto_end();
-#endif /* NEW_PACKET_LIST */
 
   if (cf->state == FILE_READ_ABORTED) {
     /* Well, the user decided to exit Wireshark.  Return CF_READ_ABORTED
@@ -965,14 +915,9 @@ cf_finish_tail(capture_file *cf, int *err)
     return CF_READ_ERROR;
   }
 
-#ifdef NEW_PACKET_LIST
   new_packet_list_check_end();
   /* Don't freeze/thaw the list when doing live capture */
   /*new_packet_list_freeze();*/
-#else
-  packet_list_check_end();
-  packet_list_freeze();
-#endif
 
   while ((wtap_read(cf->wth, err, &err_info, &data_offset))) {
     if (cf->state == FILE_READ_ABORTED) {
@@ -989,12 +934,8 @@ cf_finish_tail(capture_file *cf, int *err)
     dfilter_free(dfcode);
   }
 
-#ifdef NEW_PACKET_LIST
   /* Don't freeze/thaw the list when doing live capture */
   /*new_packet_list_thaw();*/
-#else
-  packet_list_thaw();
-#endif
 
   if (cf->state == FILE_READ_ABORTED) {
     /* Well, the user decided to abort the read.  We're only called
@@ -1007,13 +948,7 @@ cf_finish_tail(capture_file *cf, int *err)
   }
 
   if (auto_scroll_live && cf->plist_end != NULL)
-#ifdef NEW_PACKET_LIST
     new_packet_list_moveto_end();
-#else
-    /* XXX - this cheats and looks inside the packet list to find the final
-       row number. */
-    packet_list_moveto_end();
-#endif
 
   /* We're done reading sequentially through the file. */
   cf->state = FILE_READ_DONE;
@@ -1143,7 +1078,6 @@ void cf_set_rfcode(capture_file *cf, dfilter_t *rfcode)
   cf->rfcode = rfcode;
 }
 
-#ifdef NEW_PACKET_LIST
 static int
 add_packet_to_packet_list(frame_data *fdata, capture_file *cf,
     dfilter_t *dfcode, gboolean filtering_tap_listeners,
@@ -1232,123 +1166,15 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf,
   return row;
 }
 
-#else
-
-static int
-add_packet_to_packet_list(frame_data *fdata, capture_file *cf,
-    dfilter_t *dfcode, gboolean filtering_tap_listeners,
-    guint tap_flags,
-    union wtap_pseudo_header *pseudo_header, const guchar *buf,
-    gboolean refilter,
-    gboolean add_to_packet_list _U_)
+/*
+ * Initialize the col_text and col_text_len arrays.
+ */
+static void
+init_col_text(frame_data *fdata, gint num_cols)
 {
-  gboolean  create_proto_tree = FALSE;
-  epan_dissect_t edt;
-  column_info *cinfo;
-  gint row = -1;
-
-  cinfo = &cf->cinfo;
-
-  /* just add some value here until we know if it is being displayed or not */
-  fdata->cum_bytes  = cum_bytes + fdata->pkt_len;
-
-  frame_data_set_before_dissect(fdata, &cf->elapsed_time,
-                                &first_ts, &prev_dis_ts, &prev_cap_ts);
-
-  /* If either
-
-    we have a display filter and are re-applying it;
-
-    we have a list of color filters;
-
-    we have tap listeners with filters;
-
-    we have tap listeners that require a protocol tree;
-
-    we have custom columns;
-
-     allocate a protocol tree root node, so that we'll construct
-     a protocol tree against which a filter expression can be
-     evaluated. */
-  if ((dfcode != NULL && refilter) ||
-      color_filters_used() ||
-      have_custom_cols(cinfo) ||
-      filtering_tap_listeners || (tap_flags & TL_REQUIRES_PROTO_TREE))
-      create_proto_tree = TRUE;
-
-  /* Dissect the frame. */
-  epan_dissect_init(&edt, create_proto_tree, FALSE);
-
-  if (dfcode != NULL && refilter) {
-      epan_dissect_prime_dfilter(&edt, dfcode);
-  }
-
-  /* prepare color filters */
-  color_filters_prime_edt(&edt);
-  col_custom_prime_edt(&edt, cinfo);
-
-  tap_queue_init(&edt);
-  epan_dissect_run(&edt, pseudo_header, buf, fdata, cinfo);
-  tap_push_tapped_queue(&edt);
-
-  /* If we have a display filter, apply it if we're refiltering, otherwise
-     leave the "passed_dfilter" flag alone.
-
-     If we don't have a display filter, set "passed_dfilter" to 1. */
-  if (dfcode != NULL) {
-    if (refilter) {
-      fdata->flags.passed_dfilter = dfilter_apply_edt(dfcode, &edt) ? 1 : 0;
-    }
-  } else
-    fdata->flags.passed_dfilter = 1;
-
-  if( (fdata->flags.passed_dfilter) || (fdata->flags.ref_time) )
-  {
-    frame_data_set_after_dissect(fdata, &cum_bytes, &prev_dis_ts);
-
-    epan_dissect_fill_in_columns(&edt, FALSE, TRUE);
-
-    /* If we haven't yet seen the first frame, this is it.
-
-       XXX - we must do this before we add the row to the display,
-       as, if the display's GtkCList's selection mode is
-       GTK_SELECTION_BROWSE, when the first entry is added to it,
-       "cf_select_packet()" will be called, and it will fetch the row
-       data for the 0th row, and will get a null pointer rather than
-       "fdata", as "gtk_clist_append()" won't yet have returned and
-       thus "gtk_clist_set_row_data()" won't yet have been called.
-
-       We thus need to leave behind bread crumbs so that
-       "cf_select_packet()" can find this frame.  See the comment
-       in "cf_select_packet()". */
-    if (cf->first_displayed == NULL)
-      cf->first_displayed = fdata;
-
-    /* This is the last frame we've seen so far. */
-    cf->last_displayed = fdata;
-
-    row = packet_list_append(cinfo->col_data, fdata);
-
-    /* colorize packet: first apply color filters
-     * then if packet is marked, use preferences to overwrite color
-     * we do both to make sure that when a packet gets un-marked, the
-     * color will be correctly set (fixes bug 2038)
-     */
-     fdata->color_filter = color_filters_colorize_packet(row, &edt);
-     if (fdata->flags.marked) {
-       packet_list_set_colors(row, &prefs.gui_marked_fg, &prefs.gui_marked_bg);
-     }
-     if (fdata->flags.ignored) {
-       packet_list_set_colors(row, &prefs.gui_ignored_fg, &prefs.gui_ignored_bg);
-     }
-
-    cf->displayed_count++;
-  }
-
-  epan_dissect_cleanup(&edt);
-  return row;
+  fdata->col_text_len = se_alloc0(sizeof(*fdata->col_text_len) * num_cols);
+  fdata->col_text = se_alloc0(sizeof(*fdata->col_text) * num_cols);
 }
-#endif
 
 /* read in a new packet */
 /* returns the row of the new packet in the packet list or -1 if not displayed */
@@ -1376,11 +1202,7 @@ read_packet(capture_file *cf, dfilter_t *dfcode,
 #endif
 
   frame_data_init(fdata, cf->count, phdr, offset, cum_bytes);
-
-#ifdef NEW_PACKET_LIST
-  fdata->col_text_len = se_alloc0(sizeof(fdata->col_text_len) * (cf->cinfo.num_cols));
-  fdata->col_text = se_alloc0(sizeof(fdata->col_text) * (cf->cinfo.num_cols));
-#endif
+  init_col_text(fdata, cf->cinfo.num_cols);
 
   passed = TRUE;
   if (cf->rfcode) {
@@ -1723,21 +1545,11 @@ cf_filter_packets(capture_file *cf, gchar *dftext, gboolean force)
   return CF_OK;
 }
 
-void
-cf_colorize_packets(capture_file *cf)
-{
-  rescan_packets(cf, "Colorizing", "all packets", FALSE, FALSE);
-}
-
 void
 cf_reftime_packets(capture_file *cf)
 {
 
-#ifdef NEW_PACKET_LIST
   ref_time_packets(cf);
-#else
-  rescan_packets(cf, "Reprocessing", "all packets", TRUE, TRUE);
-#endif
 }
 
 void
@@ -1804,7 +1616,6 @@ cf_read_frame(capture_file *cf, frame_data *fdata)
    any state information they have (because a preference that affects
    some dissector has changed, meaning some dissector might construct
    its state differently from the way it was constructed the last time). */
-#ifdef NEW_PACKET_LIST
 static void
 rescan_packets(capture_file *cf, const char *action, const char *action_item,
         gboolean refilter, gboolean redissect)
@@ -1817,7 +1628,6 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item,
   frame_data *selected_frame, *preceding_frame, *following_frame, *prev_frame;
   int         selected_frame_num, preceding_frame_num, following_frame_num, prev_frame_num;
   gboolean    selected_frame_seen;
-  int         frame_num;
   float       progbar_val;
   GTimeVal    start_time;
   gchar       status_str[100];
@@ -1906,7 +1716,6 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item,
   g_get_current_time(&start_time);
 
   /* no previous row yet */
-  frame_num = -1;
   prev_frame_num = -1;
   prev_frame = NULL;
 
@@ -1953,15 +1762,15 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item,
       /* Well, the user decided to abort the filtering.  Just stop.
 
          XXX - go back to the previous filter?  Users probably just
-     want not to wait for a filtering operation to finish;
-     unless we cancel by having no filter, reverting to the
-     previous filter will probably be even more expensive than
-     continuing the filtering, as it involves going back to the
-     beginning and filtering, and even with no filter we currently
-     have to re-generate the entire clist, which is also expensive.
-
-     I'm not sure what Network Monitor does, but it doesn't appear
-     to give you an unfiltered display if you cancel. */
+         want not to wait for a filtering operation to finish;
+         unless we cancel by having no filter, reverting to the
+         previous filter will probably be even more expensive than
+         continuing the filtering, as it involves going back to the
+         beginning and filtering, and even with no filter we currently
+         have to re-generate the entire clist, which is also expensive.
+
+         I'm not sure what Network Monitor does, but it doesn't appear
+         to give you an unfiltered display if you cancel. */
       break;
     }
 
@@ -1979,8 +1788,7 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item,
        * And after that fdata->col_text (which is allocated using se_alloc0())
        * no longer points to valid memory.
        */
-      fdata->col_text_len = se_alloc0(sizeof(fdata->col_text_len) * (cf->cinfo.num_cols));
-      fdata->col_text = se_alloc0(sizeof(fdata->col_text) * (cf->cinfo.num_cols));
+      init_col_text(fdata, cf->cinfo.num_cols);
     }
 
     if (!cf_read_frame(cf, fdata))
@@ -2107,299 +1915,12 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item,
   dfilter_free(dfcode);
 }
 
-#else
-
-static void
-rescan_packets(capture_file *cf, const char *action, const char *action_item,
-        gboolean refilter, gboolean redissect)
-{
-  frame_data *fdata;
-  progdlg_t  *progbar = NULL;
-  gboolean    stop_flag;
-  int         count;
-  frame_data *selected_frame, *preceding_frame, *following_frame, *prev_frame;
-  int         selected_row, prev_row, preceding_row, following_row;
-  gboolean    selected_frame_seen;
-  int         row;
-  float       progbar_val;
-  GTimeVal    start_time;
-  gchar       status_str[100];
-  int         progbar_nextstep;
-  int         progbar_quantum;
-  dfilter_t   *dfcode;
-  gboolean    filtering_tap_listeners;
-  guint       tap_flags;
-  gboolean    add_to_packet_list = TRUE;
-  gboolean compiled;
-
-  /* Compile the current display filter.
-   * We assume this will not fail since cf->dfilter is only set in
-   * cf_filter IFF the filter was valid.
-   */
-  compiled = dfilter_compile(cf->dfilter, &dfcode);
-  g_assert(!cf->dfilter || (compiled && dfcode));
-
-  /* Do we have any tap listeners with filters? */
-  filtering_tap_listeners = have_filtering_tap_listeners();
-
-  /* Get the union of the flags for all tap listeners. */
-  tap_flags = union_of_tap_listener_flags();
-
-  reset_tap_listeners();
-  /* Which frame, if any, is the currently selected frame?
-     XXX - should the selected frame or the focus frame be the "current"
-     frame, that frame being the one from which "Find Frame" searches
-     start? */
-  selected_frame = cf->current_frame;
-
-  /* We don't yet know what row that frame will be on, if any, after we
-     rebuild the clist, however. */
-  selected_row = -1;
-
-  /* Freeze the packet list while we redo it, so we don't get any
-     screen updates while it happens. */
-  packet_list_freeze();
-
-  /* Clear it out. */
-  packet_list_clear();
-
-  if (redissect) {
-    /* We need to re-initialize all the state information that protocols
-       keep, because some preference that controls a dissector has changed,
-       which might cause the state information to be constructed differently
-       by that dissector. */
-
-    /* We might receive new packets while redissecting, and we don't
-       want to dissect those before their time. */
-    cf->redissecting = TRUE;
-
-    /* Cleanup all data structures used for dissection. */
-    cleanup_dissection();
-    /* Initialize all data structures used for dissection. */
-    init_dissection();
-
-  }
-
-  /* We don't yet know which will be the first and last frames displayed. */
-  cf->first_displayed = NULL;
-  cf->last_displayed = NULL;
-
-  reset_elapsed();
-
-  /* We currently don't display any packets */
-  cf->displayed_count = 0;
-
-  /* Iterate through the list of frames.  Call a routine for each frame
-     to check whether it should be displayed and, if so, add it to
-     the display list. */
-  nstime_set_unset(&first_ts);
-  nstime_set_unset(&prev_dis_ts);
-  nstime_set_unset(&prev_cap_ts);
-  cum_bytes = 0;
-
-  /* Update the progress bar when it gets to this value. */
-  progbar_nextstep = 0;
-  /* When we reach the value that triggers a progress bar update,
-     bump that value by this amount. */
-  progbar_quantum = cf->count/N_PROGBAR_UPDATES;
-  /* Count of packets at which we've looked. */
-  count = 0;
-  /* Progress so far. */
-  progbar_val = 0.0f;
-
-  stop_flag = FALSE;
-  g_get_current_time(&start_time);
-
-  row = -1;     /* no previous row yet */
-  prev_row = -1;
-  prev_frame = NULL;
-
-  preceding_row = -1;
-  preceding_frame = NULL;
-  following_row = -1;
-  following_frame = NULL;
-
-  selected_frame_seen = FALSE;
-
-  for (fdata = cf->plist_start; fdata != NULL; fdata = fdata->next) {
-    /* Create the progress bar if necessary.
-       We check on every iteration of the loop, so that it takes no
-       longer than the standard time to create it (otherwise, for a
-       large file, we might take considerably longer than that standard
-       time in order to get to the next progress bar step). */
-    if (progbar == NULL)
-      progbar = delayed_create_progress_dlg(action, action_item, TRUE,
-                                            &stop_flag, &start_time,
-                                            progbar_val);
-
-    /* Update the progress bar, but do it only N_PROGBAR_UPDATES times;
-       when we update it, we have to run the GTK+ main loop to get it
-       to repaint what's pending, and doing so may involve an "ioctl()"
-       to see if there's any pending input from an X server, and doing
-       that for every packet can be costly, especially on a big file. */
-    if (count >= progbar_nextstep) {
-      /* let's not divide by zero. I should never be started
-       * with count == 0, so let's assert that
-       */
-      g_assert(cf->count > 0);
-      progbar_val = (gfloat) count / cf->count;
-
-      if (progbar != NULL) {
-        g_snprintf(status_str, sizeof(status_str),
-                  "%4u of %u frames", count, cf->count);
-        update_progress_dlg(progbar, progbar_val, status_str);
-      }
-
-      progbar_nextstep += progbar_quantum;
-    }
-
-    if (stop_flag) {
-      /* Well, the user decided to abort the filtering.  Just stop.
-
-         XXX - go back to the previous filter?  Users probably just
-     want not to wait for a filtering operation to finish;
-     unless we cancel by having no filter, reverting to the
-     previous filter will probably be even more expensive than
-     continuing the filtering, as it involves going back to the
-     beginning and filtering, and even with no filter we currently
-     have to re-generate the entire clist, which is also expensive.
-
-     I'm not sure what Network Monitor does, but it doesn't appear
-     to give you an unfiltered display if you cancel. */
-      break;
-    }
-
-    count++;
-
-    if (redissect) {
-      /* Since all state for the frame was destroyed, mark the frame
-       * as not visited, free the GSList referring to the state
-       * data (the per-frame data itself was freed by
-       * "init_dissection()"), and null out the GSList pointer.
-       */
-      fdata->flags.visited = 0;
-      frame_data_cleanup(fdata);
-    }
-
-    if (!cf_read_frame(cf, fdata))
-      break; /* error reading the frame */
-
-    /* If the previous frame is displayed, and we haven't yet seen the
-       selected frame, remember that frame - it's the closest one we've
-       yet seen before the selected frame. */
-    if (prev_row != -1 && !selected_frame_seen) {
-      preceding_row = prev_row;
-      preceding_frame = prev_frame;
-    }
-    row = add_packet_to_packet_list(fdata, cf, dfcode, filtering_tap_listeners,
-                                    tap_flags, &cf->pseudo_header, cf->pd,
-                                    refilter,
-                                    add_to_packet_list);
-
-    /* If this frame is displayed, and this is the first frame we've
-       seen displayed after the selected frame, remember this frame -
-       it's the closest one we've yet seen at or after the selected
-       frame. */
-    if (row != -1 && selected_frame_seen && following_row == -1) {
-      following_row = row;
-      following_frame = fdata;
-    }
-    if (fdata == selected_frame) {
-      selected_row = row;
-      selected_frame_seen = TRUE;
-    }
-
-    /* Remember this row/frame - it'll be the previous row/frame
-       on the next pass through the loop. */
-    prev_row = row;
-    prev_frame = fdata;
-  }
-
-  /* We are done redissecting the packet list. */
-  cf->redissecting = FALSE;
-
-  if (redissect) {
-    /* Clear out what remains of the visited flags and per-frame data
-       pointers.
-
-       XXX - that may cause various forms of bogosity when dissecting
-       these frames, as they won't have been seen by this sequential
-       pass, but the only alternative I see is to keep scanning them
-       even though the user requested that the scan stop, and that
-       would leave the user stuck with an Wireshark grinding on
-       until it finishes.  Should we just stick them with that? */
-    for (; fdata != NULL; fdata = fdata->next) {
-      fdata->flags.visited = 0;
-      frame_data_cleanup(fdata);
-    }
-  }
-
-  /* We're done filtering the packets; destroy the progress bar if it
-     was created. */
-  if (progbar != NULL)
-    destroy_progress_dlg(progbar);
-
-  /* Unfreeze the packet list. */
-  packet_list_thaw();
-
-  if (selected_row == -1) {
-    /* The selected frame didn't pass the filter. */
-    if (selected_frame == NULL) {
-      /* That's because there *was* no selected frame.  Make the first
-         displayed frame the current frame. */
-      selected_row = 0;
-    } else {
-      /* Find the nearest displayed frame to the selected frame (whether
-         it's before or after that frame) and make that the current frame.
-         If the next and previous displayed frames are equidistant from the
-         selected frame, choose the next one. */
-      g_assert(following_frame == NULL ||
-               following_frame->num >= selected_frame->num);
-      g_assert(preceding_frame == NULL ||
-               preceding_frame->num <= selected_frame->num);
-      if (following_frame == NULL) {
-        /* No frame after the selected frame passed the filter, so we
-           have to select the last displayed frame before the selected
-           frame. */
-        selected_row = preceding_row;
-      } else if (preceding_frame == NULL) {
-        /* No frame before the selected frame passed the filter, so we
-           have to select the first displayed frame after the selected
-           frame. */
-        selected_row = following_row;
-      } else {
-        /* Frames before and after the selected frame passed the filter, so
-           we'll select the previous frame */
-        selected_row = preceding_row;
-      }
-    }
-  }
-
-  if (selected_row == -1) {
-    /* There are no frames displayed at all. */
-    cf_unselect_packet(cf);
-  } else {
-    /* Either the frame that was selected passed the filter, or we've
-       found the nearest displayed frame to that frame.  Select it, make
-       it the focus row, and make it visible. */
-    if (selected_row == 0) {
-      /* Set to invalid to force update of packet list and packet details */
-      cf->current_row = -1;
-    }
-    packet_list_set_selected_row(selected_row);
-  }
-
-  /* Cleanup and release all dfilter resources */
-  dfilter_free(dfcode);
-}
-#endif /* NEW_PACKET_LIST */
 
 /*
  * Scan trough all frame data and recalculate the ref time
  * without rereading the file.
  * XXX - do we need a progres bar or is this fast enough?
  */
-#ifdef NEW_PACKET_LIST
 static void
 ref_time_packets(capture_file *cf)
 {
@@ -2472,7 +1993,6 @@ ref_time_packets(capture_file *cf)
     }
   }
 }
-#endif
 
 typedef enum {
   PSP_FINISHED,
@@ -3233,181 +2753,6 @@ cf_write_carrays_packets(capture_file *cf, print_args_t *print_args)
   return CF_PRINT_OK;
 }
 
-#ifndef NEW_PACKET_LIST /* This function is not needed with the new packet list */
-
-/* Scan through the packet list and change all columns that use the
-   "command-line-specified" time stamp format to use the current
-   value of that format. */
-void
-cf_change_time_formats(capture_file *cf)
-{
-  int         i;
-  frame_data *fdata;
-  progdlg_t  *progbar = NULL;
-  gboolean    stop_flag;
-  int         count;
-  int         row;
-  float       progbar_val;
-  GTimeVal    start_time;
-  gchar       status_str[100];
-  int         progbar_nextstep;
-  int         progbar_quantum;
-  gboolean    sorted_by_frame_column;
-
-  /* Adjust timestamp precision if auto is selected */
-  cf_timestamp_auto_precision(cf);
-
-  /* Are there any columns with time stamps in the "command-line-specified"
-     format?
-
-     XXX - we have to force the "column is writable" flag on, as it
-     might be off from the last frame that was dissected. */
-  col_set_writable(&cf->cinfo, TRUE);
-  if (!check_col(&cf->cinfo, COL_CLS_TIME) &&
-      !check_col(&cf->cinfo, COL_ABS_TIME) &&
-      !check_col(&cf->cinfo, COL_ABS_DATE_TIME) &&
-      !check_col(&cf->cinfo, COL_REL_TIME) &&
-      !check_col(&cf->cinfo, COL_DELTA_TIME) &&
-      !check_col(&cf->cinfo, COL_DELTA_TIME_DIS)) {
-    /* No, there aren't any columns in that format, so we have no work
-       to do. */
-    return;
-  }
-
-  /* Freeze the packet list while we redo it, so we don't get any
-     screen updates while it happens. */
-  packet_list_freeze();
-
-  /* Update the progress bar when it gets to this value. */
-  progbar_nextstep = 0;
-  /* When we reach the value that triggers a progress bar update,
-     bump that value by this amount. */
-  progbar_quantum = cf->count/N_PROGBAR_UPDATES;
-  /* Count of packets at which we've looked. */
-  count = 0;
-  /* Progress so far. */
-  progbar_val = 0.0f;
-
-  /*  If the rows are currently sorted by the frame column then we know
-   *  the row number of each packet: it's the row number of the previously
-   *  displayed packet + 1.
-   *
-   *  Otherwise, if the display is sorted by a different column then we have
-   *  to use the O(N) packet_list_find_row_from_data() (thus making the job
-   *  of changing the time display format O(N**2)).
-   *
-   *  (XXX - In fact it's still O(N**2) because gtk_clist_set_text() takes
-   *  the row number and walks that many elements down the clist to find
-   *  the appropriate element.)
-   */
-  sorted_by_frame_column = FALSE;
-  for (i = 0; i < cf->cinfo.num_cols; i++) {
-    if (cf->cinfo.col_fmt[i] == COL_NUMBER)
-    {
-      sorted_by_frame_column = (i == packet_list_get_sort_column());
-      break;
-    }
-  }
-
-  stop_flag = FALSE;
-  g_get_current_time(&start_time);
-
-  /* Iterate through the list of packets, checking whether the packet
-     is in a row of the summary list and, if so, whether there are
-     any columns that show the time in the "command-line-specified"
-     format and, if so, update that row. */
-  for (fdata = cf->plist_start, row = -1; fdata != NULL; fdata = fdata->next) {
-    /* Create the progress bar if necessary.
-       We check on every iteration of the loop, so that it takes no
-       longer than the standard time to create it (otherwise, for a
-       large file, we might take considerably longer than that standard
-       time in order to get to the next progress bar step). */
-    if (progbar == NULL)
-      progbar = delayed_create_progress_dlg("Changing", "time display",
-        TRUE, &stop_flag, &start_time, progbar_val);
-
-    /* Update the progress bar, but do it only N_PROGBAR_UPDATES times;
-       when we update it, we have to run the GTK+ main loop to get it
-       to repaint what's pending, and doing so may involve an "ioctl()"
-       to see if there's any pending input from an X server, and doing
-       that for every packet can be costly, especially on a big file. */
-    if (count >= progbar_nextstep) {
-      /* let's not divide by zero. I should never be started
-       * with count == 0, so let's assert that
-       */
-      g_assert(cf->count > 0);
-
-      progbar_val = (gfloat) count / cf->count;
-
-      if (progbar != NULL) {
-        g_snprintf(status_str, sizeof(status_str),
-                   "%4u of %u packets", count, cf->count);
-        update_progress_dlg(progbar, progbar_val, status_str);
-      }
-
-      progbar_nextstep += progbar_quantum;
-    }
-
-    if (stop_flag) {
-      /* Well, the user decided to abort the redisplay.  Just stop.
-
-         XXX - this leaves the time field in the old format in
-     frames we haven't yet processed.  So it goes; should we
-     simply not offer them the option of stopping? */
-      break;
-    }
-
-    count++;
-
-    /* Find what row this packet is in. */
-    if (!sorted_by_frame_column) {
-      /* This function is O(N), so we try to avoid using it... */
-      row = packet_list_find_row_from_data(fdata);
-    } else {
-      /* ...which we do by maintaining a count of packets that are
-         being displayed (i.e., that have passed the display filter),
-         and using the current value of that count as the row number
-         (which is why we can only do it when the display is sorted
-         by the frame number). */
-      if (fdata->flags.passed_dfilter)
-        row++;
-      else
-        continue;
-    }
-
-    if (row != -1) {
-      /* This packet is in the summary list, on row "row". */
-
-      for (i = 0; i < cf->cinfo.num_cols; i++) {
-        if (col_has_time_fmt(&cf->cinfo, i)) {
-          /* This is one of the columns that shows the time in
-             "command-line-specified" format; update it. */
-          cf->cinfo.col_buf[i][0] = '\0';
-          col_set_fmt_time(fdata, &cf->cinfo, cf->cinfo.col_fmt[i], i);
-          packet_list_set_text(row, i, cf->cinfo.col_data[i]);
-        }
-      }
-    }
-  }
-
-  /* We're done redisplaying the packets; destroy the progress bar if it
-     was created. */
-  if (progbar != NULL)
-    destroy_progress_dlg(progbar);
-
-  /* Set the column widths of those columns that show the time in
-     "command-line-specified" format. */
-  for (i = 0; i < cf->cinfo.num_cols; i++) {
-    if (col_has_time_fmt(&cf->cinfo, i)) {
-      packet_list_set_time_width(cf->cinfo.col_fmt[i], i);
-    }
-  }
-
-  /* Unfreeze the packet list. */
-  packet_list_thaw();
-}
-#endif /* NEW_PACKET_LIST */
-
 gboolean
 cf_find_packet_protocol_tree(capture_file *cf, const char *string,
                              search_direction dir)
@@ -3881,7 +3226,6 @@ find_packet(capture_file *cf,
     stop_flag = FALSE;
     g_get_current_time(&start_time);
 
-    fdata = start_fd;
     title = cf->sfilter?cf->sfilter:"";
     for (;;) {
       /* Create the progress bar if necessary.
@@ -3995,16 +3339,11 @@ find_packet(capture_file *cf,
   }
 
   if (new_fd != NULL) {
-#ifdef NEW_PACKET_LIST
     /* Find and select */
     cf->search_in_progress = TRUE;
     row = new_packet_list_find_row_from_data(fdata, TRUE);
     cf->search_in_progress = FALSE;
     cf->search_pos = 0; /* Reset the position */
-#else
-    /* We found a frame.  Find what row it's in. */
-    row = packet_list_find_row_from_data(new_fd);
-#endif /* NEW_PACKET_LIST */
     if (row == -1) {
       /* We didn't find a row even though we know that a frame
        * exists that satifies the search criteria. This means that the
@@ -4015,11 +3354,6 @@ find_packet(capture_file *cf,
                     simple_dialog_primary_start(), simple_dialog_primary_end());
       return FALSE;
     }
-
-#ifndef NEW_PACKET_LIST
-    /* Select that row, make it the focus row, and make it visible. */
-    packet_list_set_selected_row(row);
-#endif /* NEW_PACKET_LIST */
     return TRUE;    /* success */
   } else
     return FALSE;   /* failure */
@@ -4029,7 +3363,6 @@ gboolean
 cf_goto_frame(capture_file *cf, guint fnumber)
 {
   frame_data *fdata;
-  int row;
 
   for (fdata = cf->plist_start; fdata != NULL && fdata->num < fnumber; fdata = fdata->next)
     ;
@@ -4046,82 +3379,23 @@ cf_goto_frame(capture_file *cf, guint fnumber)
     return FALSE;   /* we failed to go to that packet */
   }
 
-#ifdef NEW_PACKET_LIST
-  row = new_packet_list_find_row_from_data(fdata, TRUE);
-#else
-  /* We found that packet, and it's currently being displayed.
-     Find what row it's in. */
-  row = packet_list_find_row_from_data(fdata);
-  g_assert(row != -1);
-
-  /* Select that row, make it the focus row, and make it visible. */
-  packet_list_set_selected_row(row);
-#endif /* NEW_PACKET_LIST */
+  new_packet_list_find_row_from_data(fdata, TRUE);
   return TRUE;  /* we got to that packet */
 }
 
 gboolean
-cf_goto_top_frame(capture_file *cf _U_)
+cf_goto_top_frame()
 {
-#ifdef NEW_PACKET_LIST
   /* Find and select */
   new_packet_list_select_first_row();
-#else
-  frame_data *fdata;
-  int row;
-  frame_data *lowest_fdata = NULL;
-
-  for (fdata = cf->plist_start; fdata != NULL; fdata = fdata->next) {
-    if (fdata->flags.passed_dfilter) {
-        lowest_fdata = fdata;
-        break;
-    }
-  }
-
-  if (lowest_fdata == NULL) {
-      return FALSE;
-  }
-
-  /* We found that packet, and it's currently being displayed.
-     Find what row it's in. */
-  row = packet_list_find_row_from_data(lowest_fdata);
-  g_assert(row != -1);
-
-  /* Select that row, make it the focus row, and make it visible. */
-  packet_list_set_selected_row(row);
-#endif /* NEW_PACKET_LIST */
   return TRUE;  /* we got to that packet */
 }
 
 gboolean
-cf_goto_bottom_frame(capture_file *cf _U_) /* cf is unused w/ NEW_PACKET_LIST */
+cf_goto_bottom_frame()
 {
-#ifdef NEW_PACKET_LIST
   /* Find and select */
   new_packet_list_select_last_row();
-#else
-  frame_data *fdata;
-  int row;
-  frame_data *highest_fdata = NULL;
-
-  for (fdata = cf->plist_start; fdata != NULL; fdata = fdata->next) {
-    if (fdata->flags.passed_dfilter) {
-        highest_fdata = fdata;
-    }
-  }
-
-  if (highest_fdata == NULL) {
-      return FALSE;
-  }
-
-  /* We found that packet, and it's currently being displayed.
-     Find what row it's in. */
-  row = packet_list_find_row_from_data(highest_fdata);
-  g_assert(row != -1);
-
-  /* Select that row, make it the focus row, and make it visible. */
-  packet_list_set_selected_row(row);
-#endif /* NEW_PACKET_LIST */
   return TRUE;  /* we got to that packet */
 }
 
@@ -4154,11 +3428,7 @@ cf_select_packet(capture_file *cf, int row)
   frame_data *fdata;
 
   /* Get the frame data struct pointer for this frame */
-#ifdef NEW_PACKET_LIST
   fdata = new_packet_list_get_row_data(row);
-#else
-  fdata = (frame_data *)packet_list_get_row_data(row);
-#endif
 
   if (fdata == NULL) {
     /* XXX - if a GtkCList's selection mode is GTK_SELECTION_BROWSE, when
@@ -4579,10 +3849,10 @@ cf_open_failure_alert_box(const char *filename, int err, gchar *err_info,
 
     case WTAP_ERR_UNSUPPORTED_ENCAP:
       if (for_writing) {
-    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
               "Wireshark can't save this capture in that format.");
       } else {
-    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
               "The file \"%s\" is a capture for a network type that Wireshark doesn't support.\n"
               "(%s)",
               filename, err_info);
@@ -4592,10 +3862,10 @@ cf_open_failure_alert_box(const char *filename, int err, gchar *err_info,
 
     case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
       if (for_writing) {
-    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
               "Wireshark can't save this capture in that format.");
       } else {
-    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
               "The file \"%s\" is a capture for a network type that Wireshark doesn't support.",
               filename);
       }
@@ -4612,11 +3882,11 @@ cf_open_failure_alert_box(const char *filename, int err, gchar *err_info,
 
     case WTAP_ERR_CANT_OPEN:
       if (for_writing) {
-    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
               "The file \"%s\" could not be created for some unknown reason.",
               filename);
       } else {
-    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
               "The file \"%s\" could not be opened for some unknown reason.",
               filename);
       }