iface_lists: Access all_ifaces member by reference

Change access of all_ifaces elements from by val to by reference.
With this change unnecessary copying of the whole struct is avoided
but even more important is that elements no longer have to be
removed and inserted whenever data is updated.

This change aims to make it more clear that all_ifaces elements
shall never be removed from the array without freeing resources
via the capture_opts_free_interface_t function.

NOTE: Code for GTK UI not updated

Ping-Bug: 13864
Change-Id: I36742cb1d5c8daa136c9d3732a044a7c8e5c7fe7
Reviewed-on: https://code.wireshark.org/review/23201
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Mikael Kanstrup 2017-08-24 16:16:34 +02:00 committed by Anders Broman
parent 76c231bd68
commit 8873c7e494
17 changed files with 233 additions and 270 deletions

View File

@ -1206,7 +1206,7 @@ void
collect_ifaces(capture_options *capture_opts)
{
guint i;
interface_t device;
interface_t *device;
interface_options interface_opts;
/* Empty out the existing list of interfaces. */
@ -1215,23 +1215,23 @@ collect_ifaces(capture_options *capture_opts)
/* Now fill the list up again. */
for (i = 0; i < capture_opts->all_ifaces->len; i++) {
device = g_array_index(capture_opts->all_ifaces, interface_t, i);
if (!device.hidden && device.selected) {
interface_opts.name = g_strdup(device.name);
interface_opts.descr = g_strdup(device.display_name);
interface_opts.console_display_name = g_strdup(device.name);
interface_opts.linktype = device.active_dlt;
interface_opts.cfilter = g_strdup(device.cfilter);
interface_opts.timestamp_type = g_strdup(device.timestamp_type);
interface_opts.snaplen = device.snaplen;
interface_opts.has_snaplen = device.has_snaplen;
interface_opts.promisc_mode = device.pmode;
interface_opts.if_type = device.if_info.type;
device = &g_array_index(capture_opts->all_ifaces, interface_t, i);
if (!device->hidden && device->selected) {
interface_opts.name = g_strdup(device->name);
interface_opts.descr = g_strdup(device->display_name);
interface_opts.console_display_name = g_strdup(device->name);
interface_opts.linktype = device->active_dlt;
interface_opts.cfilter = g_strdup(device->cfilter);
interface_opts.timestamp_type = g_strdup(device->timestamp_type);
interface_opts.snaplen = device->snaplen;
interface_opts.has_snaplen = device->has_snaplen;
interface_opts.promisc_mode = device->pmode;
interface_opts.if_type = device->if_info.type;
#ifdef HAVE_EXTCAP
interface_opts.extcap = g_strdup(device.if_info.extcap);
interface_opts.extcap = g_strdup(device->if_info.extcap);
interface_opts.extcap_fifo = NULL;
interface_opts.extcap_userdata = NULL;
interface_opts.extcap_args = device.external_cap_args_settings;
interface_opts.extcap_args = device->external_cap_args_settings;
interface_opts.extcap_pid = INVALID_EXTCAP_PID;
if (interface_opts.extcap_args)
g_hash_table_ref(interface_opts.extcap_args);
@ -1245,25 +1245,25 @@ collect_ifaces(capture_options *capture_opts)
interface_opts.extcap_control_out = NULL;
#endif
#ifdef CAN_SET_CAPTURE_BUFFER_SIZE
interface_opts.buffer_size = device.buffer;
interface_opts.buffer_size = device->buffer;
#endif
#ifdef HAVE_PCAP_CREATE
interface_opts.monitor_mode = device.monitor_mode_enabled;
interface_opts.monitor_mode = device->monitor_mode_enabled;
#endif
#ifdef HAVE_PCAP_REMOTE
interface_opts.src_type = CAPTURE_IFREMOTE;
interface_opts.remote_host = g_strdup(device.remote_opts.remote_host_opts.remote_host);
interface_opts.remote_port = g_strdup(device.remote_opts.remote_host_opts.remote_port);
interface_opts.auth_type = device.remote_opts.remote_host_opts.auth_type;
interface_opts.auth_username = g_strdup(device.remote_opts.remote_host_opts.auth_username);
interface_opts.auth_password = g_strdup(device.remote_opts.remote_host_opts.auth_password);
interface_opts.datatx_udp = device.remote_opts.remote_host_opts.datatx_udp;
interface_opts.nocap_rpcap = device.remote_opts.remote_host_opts.nocap_rpcap;
interface_opts.nocap_local = device.remote_opts.remote_host_opts.nocap_local;
interface_opts.remote_host = g_strdup(device->remote_opts.remote_host_opts.remote_host);
interface_opts.remote_port = g_strdup(device->remote_opts.remote_host_opts.remote_port);
interface_opts.auth_type = device->remote_opts.remote_host_opts.auth_type;
interface_opts.auth_username = g_strdup(device->remote_opts.remote_host_opts.auth_username);
interface_opts.auth_password = g_strdup(device->remote_opts.remote_host_opts.auth_password);
interface_opts.datatx_udp = device->remote_opts.remote_host_opts.datatx_udp;
interface_opts.nocap_rpcap = device->remote_opts.remote_host_opts.nocap_rpcap;
interface_opts.nocap_local = device->remote_opts.remote_host_opts.nocap_local;
#endif
#ifdef HAVE_PCAP_SETSAMPLING
interface_opts.sampling_method = device.remote_opts.sampling_method;
interface_opts.sampling_param = device.remote_opts.sampling_param;
interface_opts.sampling_method = device->remote_opts.sampling_method;
interface_opts.sampling_param = device->remote_opts.sampling_param;
#endif
g_array_append_val(capture_opts->ifaces, interface_opts);
} else {

View File

@ -203,7 +203,7 @@ void
summary_fill_in_capture(capture_file *cf,capture_options *capture_opts, summary_tally *st)
{
iface_options iface;
interface_t device;
interface_t *device;
guint i;
if (st->ifaces->len == 0) {
@ -211,17 +211,17 @@ summary_fill_in_capture(capture_file *cf,capture_options *capture_opts, summary_
* XXX - do this only if we have a live capture.
*/
for (i = 0; i < capture_opts->all_ifaces->len; i++) {
device = g_array_index(capture_opts->all_ifaces, interface_t, i);
if (!device.selected) {
device = &g_array_index(capture_opts->all_ifaces, interface_t, i);
if (!device->selected) {
continue;
}
iface.cfilter = g_strdup(device.cfilter);
iface.name = g_strdup(device.name);
iface.descr = g_strdup(device.display_name);
iface.cfilter = g_strdup(device->cfilter);
iface.name = g_strdup(device->name);
iface.descr = g_strdup(device->display_name);
iface.drops_known = cf->drops_known;
iface.drops = cf->drops;
iface.snap = device.snaplen;
iface.encap_type = wtap_pcap_encap_to_wtap_encap(device.active_dlt);
iface.snap = device->snaplen;
iface.encap_type = wtap_pcap_encap_to_wtap_encap(device->active_dlt);
g_array_append_val(st->ifaces, iface);
}
}

View File

@ -641,7 +641,7 @@ capture_stat_start(capture_options *capture_opts) {
if_stat_cache_t *sc = NULL;
if_stat_cache_item_t *sc_item;
guint i;
interface_t device;
interface_t *device;
/* Fire up dumpcap. */
/*
@ -670,11 +670,11 @@ capture_stat_start(capture_options *capture_opts) {
/* Initialize the cache */
for (i = 0; i < capture_opts->all_ifaces->len; i++) {
device = g_array_index(capture_opts->all_ifaces, interface_t, i);
if (device.type != IF_PIPE) {
device = &g_array_index(capture_opts->all_ifaces, interface_t, i);
if (device->type != IF_PIPE) {
sc_item = (if_stat_cache_item_t *)g_malloc0(sizeof(if_stat_cache_item_t));
g_assert(device.if_info.name);
sc_item->name = g_strdup(device.if_info.name);
g_assert(device->if_info.name);
sc_item->name = g_strdup(device->if_info.name);
sc->cache_list = g_list_append(sc->cache_list, sc_item);
}
}

View File

@ -435,7 +435,7 @@ hide_interface(gchar* new_hide)
{
gchar *tok;
guint i;
interface_t device;
interface_t *device;
gboolean found = FALSE;
GList *hidden_devices = NULL, *entry;
if (new_hide != NULL) {
@ -444,13 +444,13 @@ hide_interface(gchar* new_hide)
}
}
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
found = FALSE;
for (entry = hidden_devices; entry != NULL; entry = g_list_next(entry)) {
if (strcmp((char *)entry->data, device.name)==0) {
device.hidden = TRUE;
if (device.selected) {
device.selected = FALSE;
if (strcmp((char *)entry->data, device->name)==0) {
device->hidden = TRUE;
if (device->selected) {
device->selected = FALSE;
global_capture_opts.num_selected--;
}
found = TRUE;
@ -458,10 +458,8 @@ hide_interface(gchar* new_hide)
}
}
if (!found) {
device.hidden = FALSE;
device->hidden = FALSE;
}
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
}
g_list_free(hidden_devices);
g_free(new_hide);
@ -470,22 +468,19 @@ hide_interface(gchar* new_hide)
void
update_local_interfaces(void)
{
interface_t device;
interface_t *device;
gchar *descr;
guint i;
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
device.type = capture_dev_user_linktype_find(device.name);
g_free (device.display_name);
descr = capture_dev_user_descr_find(device.name);
device.display_name = get_iface_display_name(descr, &device.if_info);
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
device->type = capture_dev_user_linktype_find(device->name);
g_free(device->display_name);
descr = capture_dev_user_descr_find(device->name);
device->display_name = get_iface_display_name(descr, &device->if_info);
g_free (descr);
device.hidden = prefs_is_capture_device_hidden(device.name);
fill_from_ifaces(&device);
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
device->hidden = prefs_is_capture_device_hidden(device->name);
fill_from_ifaces(device);
}
}
#endif /* HAVE_LIBPCAP */

View File

@ -89,19 +89,19 @@ void CaptureFilterSyntaxWorker::start() {
}
for (guint if_idx = 0; if_idx < global_capture_opts.all_ifaces->len; if_idx++) {
interface_t device;
interface_t *device;
device = g_array_index(global_capture_opts.all_ifaces, interface_t, if_idx);
if (!device.locked && device.selected) {
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, if_idx);
if (!device->locked && device->selected) {
#ifdef HAVE_EXTCAP
if (device.if_info.extcap == NULL || strlen(device.if_info.extcap) == 0) {
if (device->if_info.extcap == NULL || strlen(device->if_info.extcap) == 0) {
#endif
if (device.active_dlt >= DLT_USER0 && device.active_dlt <= DLT_USER15) {
if (device->active_dlt >= DLT_USER0 && device->active_dlt <= DLT_USER15) {
// Capture filter for DLT_USER is unknown
state = SyntaxLineEdit::Deprecated;
err_str = "Unable to check capture filter";
} else {
active_dlts.insert(device.active_dlt);
active_dlts.insert(device->active_dlt);
}
#ifdef HAVE_EXTCAP
} else {
@ -146,11 +146,11 @@ void CaptureFilterSyntaxWorker::start() {
// If it's already invalid, don't bother to check extcap
if (state != SyntaxLineEdit::Invalid) {
foreach (guint extcapif, active_extcap.toList()) {
interface_t device;
interface_t *device;
gchar *error = NULL;
device = g_array_index(global_capture_opts.all_ifaces, interface_t, extcapif);
extcap_filter_status status = extcap_verify_capture_filter(device.name, filter.toUtf8().constData(), &error);
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, extcapif);
extcap_filter_status status = extcap_verify_capture_filter(device->name, filter.toUtf8().constData(), &error);
if (status == EXTCAP_FILTER_VALID) {
DEBUG_SYNTAX_CHECK("unknown", "known good");
} else if (status == EXTCAP_FILTER_INVALID) {

View File

@ -247,22 +247,16 @@ void CaptureInterfacesDialog::updateGlobalDeviceSelections()
while (*iter) {
QString device_name = (*iter)->data(col_interface_, Qt::UserRole).value<QString>();
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device_name.compare(QString().fromUtf8(device.name)) == 0) {
if (!device.locked) {
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device_name.compare(QString().fromUtf8(device->name)) == 0) {
if (!device->locked) {
if ((*iter)->isSelected()) {
device.selected = TRUE;
device->selected = TRUE;
global_capture_opts.num_selected++;
} else {
device.selected = FALSE;
device->selected = FALSE;
}
device.locked = TRUE;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
device.locked = FALSE;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
device->locked = FALSE;
}
break;
}
@ -284,10 +278,10 @@ void CaptureInterfacesDialog::updateFromGlobalDeviceSelections()
while (*iter) {
QString device_name = (*iter)->data(col_interface_, Qt::UserRole).value<QString>();
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device_name.compare(QString().fromUtf8(device.name)) == 0) {
if ((bool)device.selected != (*iter)->isSelected()) {
(*iter)->setSelected(device.selected);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device_name.compare(QString().fromUtf8(device->name)) == 0) {
if ((bool)device->selected != (*iter)->isSelected()) {
(*iter)->setSelected(device->selected);
}
break;
}

View File

@ -71,7 +71,7 @@ void CapturePreferencesFrame::showEvent(QShowEvent *)
void CapturePreferencesFrame::updateWidgets()
{
#ifdef HAVE_LIBPCAP
interface_t device;
interface_t *device;
QString default_device_string;
if (prefs_get_string_value(pref_device_, pref_stashed)) {
@ -87,20 +87,20 @@ void CapturePreferencesFrame::updateWidgets()
wsApp->refreshLocalInterfaces();
}
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
/* Continue if capture device is hidden */
if (device.hidden) {
if (device->hidden) {
continue;
}
// InterfaceTree matches against device.name when selecting the
// InterfaceTree matches against device->name when selecting the
// default interface, so add it here if needed. On Windows this
// means that we show the user a big ugly UUID-laden device path.
// We might be able to work around that by passing device.name as
// We might be able to work around that by passing device->name as
// the userData argument to addItem instead.
QString item_text = device.display_name;
if (!item_text.contains(device.name)) {
item_text.append(QString(" (%1)").arg(device.name));
QString item_text = device->display_name;
if (!item_text.contains(device->name)) {
item_text.append(QString(" (%1)").arg(device->name));
}
ui->defaultInterfaceComboBox->addItem(item_text);
}

View File

@ -84,12 +84,12 @@ void CompiledFilterOutput::compileFilter()
foreach (QString interfaces, intList_) {
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (interfaces.compare(device.display_name)) {
if (interfaces.compare(device->display_name)) {
continue;
} else {
pcap_t *pd = pcap_open_dead(device.active_dlt, WTAP_MAX_PACKET_SIZE_STANDARD);
pcap_t *pd = pcap_open_dead(device->active_dlt, WTAP_MAX_PACKET_SIZE_STANDARD);
if (pd == NULL)
break;
g_mutex_lock(pcap_compile_mtx);

View File

@ -83,7 +83,7 @@ ExtcapOptionsDialog::ExtcapOptionsDialog(QWidget *parent) :
ExtcapOptionsDialog * ExtcapOptionsDialog::createForDevice(QString &dev_name, QWidget *parent)
{
interface_t device;
interface_t *device;
ExtcapOptionsDialog * resultDialog = NULL;
bool dev_found = false;
guint if_idx;
@ -93,8 +93,8 @@ ExtcapOptionsDialog * ExtcapOptionsDialog::createForDevice(QString &dev_name, QW
for (if_idx = 0; if_idx < global_capture_opts.all_ifaces->len; if_idx++)
{
device = g_array_index(global_capture_opts.all_ifaces, interface_t, if_idx);
if (dev_name.compare(QString(device.name)) == 0 && device.if_info.type == IF_EXTCAP)
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, if_idx);
if (dev_name.compare(QString(device->name)) == 0 && device->if_info.type == IF_EXTCAP)
{
dev_found = true;
break;
@ -108,7 +108,7 @@ ExtcapOptionsDialog * ExtcapOptionsDialog::createForDevice(QString &dev_name, QW
resultDialog->device_name = QString(dev_name);
resultDialog->device_idx = if_idx;
resultDialog->setWindowTitle(wsApp->windowTitleString(tr("Interface Options") + ": " + device.display_name));
resultDialog->setWindowTitle(wsApp->windowTitleString(tr("Interface Options") + ": " + device->display_name));
resultDialog->updateWidgets();
@ -316,11 +316,11 @@ void ExtcapOptionsDialog::on_buttonBox_rejected()
void ExtcapOptionsDialog::on_buttonBox_helpRequested()
{
interface_t device;
interface_t *device;
QString interface_help = NULL;
device = g_array_index(global_capture_opts.all_ifaces, interface_t, device_idx);
interface_help = QString(extcap_get_help_for_ifname(device.name));
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, device_idx);
interface_help = QString(extcap_get_help_for_ifname(device->name));
/* The extcap interface didn't provide an help. Let's go with the default */
if (interface_help.isEmpty()) {
wsApp->helpTopicAction(HELP_EXTCAP_OPTIONS_DIALOG);
@ -343,7 +343,7 @@ void ExtcapOptionsDialog::on_buttonBox_helpRequested()
{
QMessageBox::warning(this, tr("Extcap Help cannot be found"),
QString(tr("The help for the extcap interface %1 cannot be found. Given file: %2"))
.arg(device.name).arg(help_url.path()),
.arg(device->name).arg(help_url.path()),
QMessageBox::Ok);
}
@ -352,11 +352,9 @@ void ExtcapOptionsDialog::on_buttonBox_helpRequested()
bool ExtcapOptionsDialog::saveOptionToCaptureInfo()
{
GHashTable * ret_args;
interface_t device;
device = g_array_index(global_capture_opts.all_ifaces, interface_t, device_idx);
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, device_idx);
interface_t *device;
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, device_idx);
ret_args = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
ExtcapArgumentList::const_iterator iter;
@ -381,12 +379,9 @@ bool ExtcapOptionsDialog::saveOptionToCaptureInfo()
g_hash_table_insert(ret_args, call_string, value_string );
}
if (device.external_cap_args_settings != NULL)
g_hash_table_unref(device.external_cap_args_settings);
device.external_cap_args_settings = ret_args;
g_array_insert_val(global_capture_opts.all_ifaces, device_idx, device);
if (device->external_cap_args_settings != NULL)
g_hash_table_unref(device->external_cap_args_settings);
device->external_cap_args_settings = ret_args;
return true;
}

View File

@ -951,20 +951,20 @@ void InterfaceToolbar::interfaceListChanged()
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++)
{
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device.hidden)
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device->hidden)
continue;
if (interface_.keys().contains(device.name))
if (interface_.keys().contains(device->name))
{
ui->interfacesComboBox->addItem(device.name);
if (selected_ifname.compare(device.name) == 0)
ui->interfacesComboBox->addItem(device->name);
if (selected_ifname.compare(device->name) == 0)
{
// Keep selected interface
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
ui->interfacesComboBox->setCurrentText(device.name);
ui->interfacesComboBox->setCurrentText(device->name);
#else
int new_index = ui->interfacesComboBox->findText(device.name);
int new_index = ui->interfacesComboBox->findText(device->name);
if (new_index >= 0)
{
ui->interfacesComboBox->setCurrentIndex(new_index);

View File

@ -289,26 +289,24 @@ void MainWelcome::appInitialized()
void MainWelcome::captureFilterTextEdited(const QString capture_filter)
{
if (global_capture_opts.num_selected > 0) {
interface_t device;
interface_t *device;
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device.selected) {
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device->selected) {
continue;
}
// if (device.active_dlt == -1) {
// simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The link type of interface %s was not specified.", device.name);
// if (device->active_dlt == -1) {
// simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The link type of interface %s was not specified.", device->name);
// continue; /* Programming error: somehow managed to select an "unsupported" entry */
// }
g_array_remove_index(global_capture_opts.all_ifaces, i);
g_free(device.cfilter);
g_free(device->cfilter);
if (capture_filter.isEmpty()) {
device.cfilter = NULL;
device->cfilter = NULL;
} else {
device.cfilter = qstring_strdup(capture_filter);
device->cfilter = qstring_strdup(capture_filter);
}
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
// update_filter_string(device.name, filter_text);
// update_filter_string(device->name, filter_text);
}
}
}

View File

@ -458,12 +458,10 @@ void ManageInterfacesDialog::remoteAccepted()
while(*it) {
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if ((*it)->text(col_r_host_dev_).compare(device.name))
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if ((*it)->text(col_r_host_dev_).compare(device->name))
continue;
device.hidden = ((*it)->checkState(col_r_show_) == Qt::Checked ? false : true);
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
device->hidden = ((*it)->checkState(col_r_show_) == Qt::Checked ? false : true);
}
++it;
}
@ -481,11 +479,11 @@ void ManageInterfacesDialog::on_remoteList_itemClicked(QTreeWidgetItem *item, in
}
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device.local) {
if (item->text(col_r_host_dev_).compare(device.name))
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device->local) {
if (item->text(col_r_host_dev_).compare(device->name))
continue;
device.hidden = (item->checkState(col_r_show_) == Qt::Checked ? false : true);
device->hidden = (item->checkState(col_r_show_) == Qt::Checked ? false : true);
}
}
}
@ -498,8 +496,8 @@ void ManageInterfacesDialog::on_delRemote_clicked()
}
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (item->text(col_r_host_dev_).compare(device.remote_opts.remote_host_opts.remote_host))
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (item->text(col_r_host_dev_).compare(device->remote_opts.remote_host_opts.remote_host))
continue;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
}
@ -516,22 +514,22 @@ void ManageInterfacesDialog::on_addRemote_clicked()
void ManageInterfacesDialog::showRemoteInterfaces()
{
guint i;
interface_t device;
interface_t *device;
QTreeWidgetItem *item = NULL;
// We assume that remote interfaces are grouped by host.
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
QTreeWidgetItem *child;
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device.local) {
if (!item || item->text(col_r_host_dev_).compare(device.remote_opts.remote_host_opts.remote_host) != 0) {
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device->local) {
if (!item || item->text(col_r_host_dev_).compare(device->remote_opts.remote_host_opts.remote_host) != 0) {
item = new QTreeWidgetItem(ui->remoteList);
item->setText(col_r_host_dev_, device.remote_opts.remote_host_opts.remote_host);
item->setText(col_r_host_dev_, device->remote_opts.remote_host_opts.remote_host);
item->setExpanded(true);
}
child = new QTreeWidgetItem(item);
child->setCheckState(col_r_show_, device.hidden ? Qt::Unchecked : Qt::Checked);
child->setText(col_r_host_dev_, QString(device.name));
child->setCheckState(col_r_show_, device->hidden ? Qt::Unchecked : Qt::Checked);
child->setText(col_r_host_dev_, QString(device->name));
}
}
}
@ -539,19 +537,19 @@ void ManageInterfacesDialog::showRemoteInterfaces()
void ManageInterfacesDialog::on_remoteSettings_clicked()
{
guint i = 0;
interface_t device;
interface_t *device;
QTreeWidgetItem* item = ui->remoteList->currentItem();
if (!item) {
return;
}
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device.local) {
if (item->text(col_r_host_dev_).compare(device.name)) {
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device->local) {
if (item->text(col_r_host_dev_).compare(device->name)) {
continue;
} else {
RemoteSettingsDialog *dlg = new RemoteSettingsDialog(this, &device);
RemoteSettingsDialog *dlg = new RemoteSettingsDialog(this, device);
dlg->show();
break;
}
@ -562,19 +560,17 @@ void ManageInterfacesDialog::on_remoteSettings_clicked()
void ManageInterfacesDialog::setRemoteSettings(interface_t *iface)
{
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device.local) {
if (strcmp(iface->name, device.name)) {
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device->local) {
if (strcmp(iface->name, device->name)) {
continue;
}
device.remote_opts.remote_host_opts.nocap_rpcap = iface->remote_opts.remote_host_opts.nocap_rpcap;
device.remote_opts.remote_host_opts.datatx_udp = iface->remote_opts.remote_host_opts.datatx_udp;
device->remote_opts.remote_host_opts.nocap_rpcap = iface->remote_opts.remote_host_opts.nocap_rpcap;
device->remote_opts.remote_host_opts.datatx_udp = iface->remote_opts.remote_host_opts.datatx_udp;
#ifdef HAVE_PCAP_SETSAMPLING
device.remote_opts.sampling_method = iface->remote_opts.sampling_method;
device.remote_opts.sampling_param = iface->remote_opts.sampling_param;
device->remote_opts.sampling_method = iface->remote_opts.sampling_method;
device->remote_opts.sampling_param = iface->remote_opts.sampling_param;
#endif //HAVE_PCAP_SETSAMPLING
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
}
}
}

View File

@ -160,9 +160,9 @@ void InterfaceTreeCacheModel::save()
for(unsigned int idx = 0; idx < global_capture_opts.all_ifaces->len; idx++)
{
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if (! device.name )
if (! device->name )
continue;
/* Try to load a saved value row for this index */
@ -184,10 +184,10 @@ void InterfaceTreeCacheModel::save()
if ( col == IFTREE_COL_HIDDEN )
{
device.hidden = saveValue.toBool();
device->hidden = saveValue.toBool();
}
#ifdef HAVE_EXTCAP
else if ( device.if_info.type == IF_EXTCAP )
else if ( device->if_info.type == IF_EXTCAP )
{
/* extcap interfaces do not have the following columns.
* ATTENTION: all generic columns must be added, BEFORE this
@ -196,12 +196,12 @@ void InterfaceTreeCacheModel::save()
#endif
else if ( col == IFTREE_COL_PROMISCUOUSMODE )
{
device.pmode = saveValue.toBool();
device->pmode = saveValue.toBool();
}
#ifdef HAVE_PCAP_CREATE
else if ( col == IFTREE_COL_MONITOR_MODE )
{
device.monitor_mode_enabled = saveValue.toBool();
device->monitor_mode_enabled = saveValue.toBool();
}
#endif
else if ( col == IFTREE_COL_SNAPLEN )
@ -209,40 +209,36 @@ void InterfaceTreeCacheModel::save()
int iVal = saveValue.toInt();
if ( iVal != WTAP_MAX_PACKET_SIZE_STANDARD )
{
device.has_snaplen = true;
device.snaplen = iVal;
device->has_snaplen = true;
device->snaplen = iVal;
}
else
{
device.has_snaplen = false;
device.snaplen = WTAP_MAX_PACKET_SIZE_STANDARD;
device->has_snaplen = false;
device->snaplen = WTAP_MAX_PACKET_SIZE_STANDARD;
}
}
#ifdef CAN_SET_CAPTURE_BUFFER_SIZE
else if ( col == IFTREE_COL_BUFFERLEN )
{
device.buffer = saveValue.toInt();
device->buffer = saveValue.toInt();
}
#endif
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, idx);
g_array_insert_val(global_capture_opts.all_ifaces, idx, device);
++it;
}
}
QVariant content = getColumnContent(idx, IFTREE_COL_HIDDEN, Qt::CheckStateRole);
if ( content.isValid() && static_cast<Qt::CheckState>(content.toInt()) == Qt::Unchecked )
prefStorage[&prefs.capture_devices_hide] << QString(device.name);
prefStorage[&prefs.capture_devices_hide] << QString(device->name);
content = getColumnContent(idx, IFTREE_COL_INTERFACE_COMMENT);
if ( content.isValid() && content.toString().size() > 0 )
prefStorage[&prefs.capture_devices_descr] << QString("%1(%2)").arg(device.name).arg(content.toString());
prefStorage[&prefs.capture_devices_descr] << QString("%1(%2)").arg(device->name).arg(content.toString());
bool allowExtendedColumns = true;
#ifdef HAVE_EXTCAP
if ( device.if_info.type == IF_EXTCAP )
if ( device->if_info.type == IF_EXTCAP )
allowExtendedColumns = false;
#endif
if ( allowExtendedColumns )
@ -251,13 +247,13 @@ void InterfaceTreeCacheModel::save()
if ( content.isValid() )
{
bool value = static_cast<Qt::CheckState>(content.toInt()) == Qt::Checked;
prefStorage[&prefs.capture_devices_pmode] << QString("%1(%2)").arg(device.name).arg(value ? 1 : 0);
prefStorage[&prefs.capture_devices_pmode] << QString("%1(%2)").arg(device->name).arg(value ? 1 : 0);
}
#ifdef HAVE_PCAP_CREATE
content = getColumnContent(idx, IFTREE_COL_MONITOR_MODE, Qt::CheckStateRole);
if ( content.isValid() && static_cast<Qt::CheckState>(content.toInt()) == Qt::Checked )
prefStorage[&prefs.capture_devices_monitor_mode] << QString(device.name);
prefStorage[&prefs.capture_devices_monitor_mode] << QString(device->name);
#endif
content = getColumnContent(idx, IFTREE_COL_SNAPLEN);
@ -265,9 +261,9 @@ void InterfaceTreeCacheModel::save()
{
int value = content.toInt();
prefStorage[&prefs.capture_devices_snaplen] <<
QString("%1:%2(%3)").arg(device.name).
arg(device.has_snaplen ? 1 : 0).
arg(device.has_snaplen ? value : WTAP_MAX_PACKET_SIZE_STANDARD);
QString("%1:%2(%3)").arg(device->name).
arg(device->has_snaplen ? 1 : 0).
arg(device->has_snaplen ? value : WTAP_MAX_PACKET_SIZE_STANDARD);
}
#ifdef CAN_SET_CAPTURE_BUFFER_SIZE
@ -278,7 +274,7 @@ void InterfaceTreeCacheModel::save()
if ( value != -1 )
{
prefStorage[&prefs.capture_devices_buffersize] <<
QString("%1(%2)").arg(device.name).
QString("%1(%2)").arg(device->name).
arg(value);
}
}

View File

@ -121,7 +121,7 @@ QVariant InterfaceTreeModel::data(const QModelIndex &index, int role) const
if ( interfacesLoaded )
{
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, row);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, row);
/* Data for display in cell */
if ( role == Qt::DisplayRole )
@ -129,55 +129,55 @@ QVariant InterfaceTreeModel::data(const QModelIndex &index, int role) const
/* Only the name is being displayed */
if ( col == IFTREE_COL_NAME )
{
return QString(device.display_name);
return QString(device->display_name);
}
else if ( col == IFTREE_COL_INTERFACE_NAME )
{
return QString(device.name);
return QString(device->name);
}
else if ( col == IFTREE_COL_PIPE_PATH )
{
return QString(device.if_info.name);
return QString(device->if_info.name);
}
else if ( col == IFTREE_COL_CAPTURE_FILTER )
{
if ( device.cfilter && strlen(device.cfilter) > 0 )
return html_escape(QString(device.cfilter));
if ( device->cfilter && strlen(device->cfilter) > 0 )
return html_escape(QString(device->cfilter));
}
#ifdef HAVE_EXTCAP
else if ( col == IFTREE_COL_EXTCAP_PATH )
{
return QString(device.if_info.extcap);
return QString(device->if_info.extcap);
}
#endif
else if ( col == IFTREE_COL_SNAPLEN )
{
return device.has_snaplen ? QString::number(device.snaplen) : DefaultNumericValue;
return device->has_snaplen ? QString::number(device->snaplen) : DefaultNumericValue;
}
#ifdef CAN_SET_CAPTURE_BUFFER_SIZE
else if ( col == IFTREE_COL_BUFFERLEN )
{
return QString::number(device.buffer);
return QString::number(device->buffer);
}
#endif
else if ( col == IFTREE_COL_TYPE )
{
return QVariant::fromValue((int)device.if_info.type);
return QVariant::fromValue((int)device->if_info.type);
}
else if ( col == IFTREE_COL_INTERFACE_COMMENT )
{
QString comment = gchar_free_to_qstring(capture_dev_user_descr_find(device.name));
QString comment = gchar_free_to_qstring(capture_dev_user_descr_find(device->name));
if ( comment.length() > 0 )
return comment;
else
return QString(device.if_info.vendor_description);
return QString(device->if_info.vendor_description);
}
else if ( col == IFTREE_COL_DLT )
{
QString linkname = QObject::tr("DLT %1").arg(device.active_dlt);
for (GList *list = device.links; list != NULL; list = g_list_next(list)) {
QString linkname = QObject::tr("DLT %1").arg(device->active_dlt);
for (GList *list = device->links; list != NULL; list = g_list_next(list)) {
link_row *linkr = (link_row*)(list->data);
if (linkr->dlt != -1 && linkr->dlt == device.active_dlt) {
if (linkr->dlt != -1 && linkr->dlt == device->active_dlt) {
linkname = linkr->name;
break;
}
@ -196,16 +196,16 @@ QVariant InterfaceTreeModel::data(const QModelIndex &index, int role) const
if ( col == IFTREE_COL_HIDDEN )
{
/* Hidden is a de-selection, therefore inverted logic here */
return device.hidden ? Qt::Unchecked : Qt::Checked;
return device->hidden ? Qt::Unchecked : Qt::Checked;
}
else if ( col == IFTREE_COL_PROMISCUOUSMODE )
{
return device.pmode ? Qt::Checked : Qt::Unchecked;
return device->pmode ? Qt::Checked : Qt::Unchecked;
}
#ifdef HAVE_PCAP_CREATE
else if ( col == IFTREE_COL_MONITOR_MODE )
{
return device.monitor_mode_enabled ? Qt::Checked : Qt::Unchecked;
return device->monitor_mode_enabled ? Qt::Checked : Qt::Unchecked;
}
#endif
}
@ -214,12 +214,12 @@ QVariant InterfaceTreeModel::data(const QModelIndex &index, int role) const
{
if ( col == IFTREE_COL_STATS )
{
if ( points.contains(device.name) )
return qVariantFromValue(points[device.name]);
if ( points.contains(device->name) )
return qVariantFromValue(points[device->name]);
}
else if ( col == IFTREE_COL_HIDDEN )
{
return QVariant::fromValue((bool)device.hidden);
return QVariant::fromValue((bool)device->hidden);
}
}
#ifdef HAVE_EXTCAP
@ -228,7 +228,7 @@ QVariant InterfaceTreeModel::data(const QModelIndex &index, int role) const
{
if ( col == IFTREE_COL_EXTCAP )
{
if ( device.if_info.type == IF_EXTCAP )
if ( device->if_info.type == IF_EXTCAP )
return QIcon(StockIcon("x-capture-options"));
}
}
@ -322,8 +322,8 @@ QVariant InterfaceTreeModel::getColumnContent(int idx, int col, int role)
#ifdef HAVE_PCAP_REMOTE
bool InterfaceTreeModel::isRemote(int idx)
{
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( device.remote_opts.src_type == CAPTURE_IFREMOTE )
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( device->remote_opts.src_type == CAPTURE_IFREMOTE )
return true;
return false;
}
@ -352,20 +352,20 @@ QVariant InterfaceTreeModel::toolTipForInterface(int idx) const
if ( ! global_capture_opts.all_ifaces || global_capture_opts.all_ifaces->len <= (guint) idx)
return QVariant();
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
QString tt_str = "<p>";
if ( device.no_addresses > 0 )
if ( device->no_addresses > 0 )
{
tt_str += QString("%1: %2")
.arg(device.no_addresses > 1 ? tr("Addresses") : tr("Address"))
.arg(html_escape(device.addresses))
.arg(device->no_addresses > 1 ? tr("Addresses") : tr("Address"))
.arg(html_escape(device->addresses))
.replace('\n', ", ");
}
#ifdef HAVE_EXTCAP
else if ( device.if_info.type == IF_EXTCAP )
else if ( device->if_info.type == IF_EXTCAP )
{
tt_str = QString(tr("Extcap interface: %1")).arg(get_basename(device.if_info.extcap));
tt_str = QString(tr("Extcap interface: %1")).arg(get_basename(device->if_info.extcap));
}
#endif
else
@ -374,7 +374,7 @@ QVariant InterfaceTreeModel::toolTipForInterface(int idx) const
}
tt_str += "<br/>";
QString cfilter = device.cfilter;
QString cfilter = device->cfilter;
if ( cfilter.isEmpty() )
{
tt_str += tr("No capture filter");
@ -413,9 +413,9 @@ void InterfaceTreeModel::updateStatistic(unsigned int idx)
if ( ! global_capture_opts.all_ifaces || global_capture_opts.all_ifaces->len <= (guint) idx )
return;
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( device.if_info.type == IF_PIPE )
if ( device->if_info.type == IF_PIPE )
return;
if ( !stat_cache_ )
@ -430,20 +430,17 @@ void InterfaceTreeModel::updateStatistic(unsigned int idx)
struct pcap_stat stats;
diff = 0;
if ( capture_stats(stat_cache_, device.name, &stats) )
if ( capture_stats(stat_cache_, device->name, &stats) )
{
if ( (int)(stats.ps_recv - device.last_packets) >= 0 )
if ( (int)(stats.ps_recv - device->last_packets) >= 0 )
{
diff = stats.ps_recv - device.last_packets;
device.packet_diff = diff;
diff = stats.ps_recv - device->last_packets;
device->packet_diff = diff;
}
device.last_packets = stats.ps_recv;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, idx);
g_array_insert_val(global_capture_opts.all_ifaces, idx, device);
device->last_packets = stats.ps_recv;
}
points[device.name].append(diff);
points[device->name].append(diff);
emit dataChanged(index(idx, IFTREE_COL_STATS), index(idx, IFTREE_COL_STATS));
#else
Q_UNUSED(idx)
@ -456,9 +453,9 @@ void InterfaceTreeModel::getPoints(int idx, PointList *pts)
if ( ! global_capture_opts.all_ifaces || global_capture_opts.all_ifaces->len <= (guint) idx )
return;
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( points.contains(device.name) )
pts->append(points[device.name]);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( points.contains(device->name) )
pts->append(points[device->name]);
#else
Q_UNUSED(idx)
Q_UNUSED(pts)
@ -471,9 +468,9 @@ QItemSelection InterfaceTreeModel::selectedDevices()
#ifdef HAVE_LIBPCAP
for( int idx = 0; idx < rowCount(); idx++ )
{
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( device.selected )
if ( device->selected )
{
QModelIndex selectIndex = index(idx, 0);
mySelection.merge(
@ -514,27 +511,21 @@ bool InterfaceTreeModel::updateSelectedDevices(QItemSelection sourceSelection)
for ( unsigned int idx = 0; idx < global_capture_opts.all_ifaces->len; idx++ )
{
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( !device.locked )
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, idx);
if ( !device->locked )
{
if ( selectedIndices.contains(idx) )
{
if (! device.selected )
if (! device->selected )
selectionHasChanged = true;
device.selected = TRUE;
device->selected = TRUE;
global_capture_opts.num_selected++;
} else {
if ( device.selected )
if ( device->selected )
selectionHasChanged = true;
device.selected = FALSE;
device->selected = FALSE;
}
device.locked = TRUE;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, idx);
g_array_insert_val(global_capture_opts.all_ifaces, idx, device);
device.locked = FALSE;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, idx);
g_array_insert_val(global_capture_opts.all_ifaces, idx, device);
device->locked = FALSE;
}
}
#else

View File

@ -256,13 +256,13 @@ QPair<const QString, bool> CaptureFilterEdit::getSelectedFilter()
int selected_devices = 0;
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device.selected) {
interface_t *device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device->selected) {
selected_devices++;
if (selected_devices == 1) {
user_filter = device.cfilter;
user_filter = device->cfilter;
} else {
if (user_filter.compare(device.cfilter)) {
if (user_filter.compare(device->cfilter)) {
filter_conflict = true;
}
}

View File

@ -1026,12 +1026,12 @@ iface_mon_event_cb(const char *iface, int up)
{
int present = 0;
guint ifs, j;
interface_t device;
interface_t *device;
interface_options interface_opts;
for (ifs = 0; ifs < global_capture_opts.all_ifaces->len; ifs++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, ifs);
if (strcmp(device.name, iface) == 0) {
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, ifs);
if (strcmp(device->name, iface) == 0) {
present = 1;
if (!up) {
/*
@ -1041,7 +1041,7 @@ iface_mon_event_cb(const char *iface, int up)
*/
for (j = 0; j < global_capture_opts.ifaces->len; j++) {
interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, j);
if (strcmp(interface_opts.name, device.name) == 0) {
if (strcmp(interface_opts.name, device->name) == 0) {
g_array_remove_index(global_capture_opts.ifaces, j);
}
}

View File

@ -737,15 +737,15 @@ int main(int argc, char *qt_argv[])
/* Get the list of link-layer types for the capture devices. */
if_capabilities_t *caps;
guint i;
interface_t device;
interface_t *device;
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
int if_caps_queries = caps_queries;
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device.selected) {
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (device->selected) {
#if defined(HAVE_PCAP_CREATE)
caps = capture_get_if_capabilities(device.name, device.monitor_mode_supported, NULL, &err_str, main_window_update);
caps = capture_get_if_capabilities(device->name, device->monitor_mode_supported, NULL, &err_str, main_window_update);
#else
caps = capture_get_if_capabilities(device.name, FALSE, NULL, &err_str,main_window_update);
caps = capture_get_if_capabilities(device->name, FALSE, NULL, &err_str,main_window_update);
#endif
if (caps == NULL) {
cmdarg_err("%s", err_str);
@ -754,7 +754,7 @@ int main(int argc, char *qt_argv[])
goto clean_exit;
}
if (caps->data_link_types == NULL) {
cmdarg_err("The capture device \"%s\" has no data link types.", device.name);
cmdarg_err("The capture device \"%s\" has no data link types.", device->name);
ret_val = INVALID_LINK_TYPE;
goto clean_exit;
}
@ -762,10 +762,10 @@ int main(int argc, char *qt_argv[])
create_console();
#endif /* _WIN32 */
#if defined(HAVE_PCAP_CREATE)
if (device.monitor_mode_supported)
if (device->monitor_mode_supported)
if_caps_queries |= CAPS_MONITOR_MODE;
#endif
capture_opts_print_if_capabilities(caps, device.name, if_caps_queries);
capture_opts_print_if_capabilities(caps, device->name, if_caps_queries);
#ifdef _WIN32
destroy_console();
#endif /* _WIN32 */
@ -794,14 +794,12 @@ int main(int argc, char *qt_argv[])
if ((global_capture_opts.num_selected == 0) &&
(prefs.capture_device != NULL)) {
guint i;
interface_t device;
interface_t *device;
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device.hidden && strcmp(device.display_name, prefs.capture_device) == 0) {
device.selected = TRUE;
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (!device->hidden && strcmp(device->display_name, prefs.capture_device) == 0) {
device->selected = TRUE;
global_capture_opts.num_selected++;
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
break;
}
}