extcap: remove redundant casts.
[metze/wireshark/wip.git] / file_packet_provider.c
1 /* file_packet_provider_data.c
2  * Routines for a packet_provider_data for packets from a file.
3  *
4  * Wireshark - Network traffic analyzer
5  * By Gerald Combs <gerald@wireshark.org>
6  * Copyright 1998 Gerald Combs
7  *
8  * SPDX-License-Identifier: GPL-2.0-or-later
9  */
10
11 #include <glib.h>
12
13 #include "cfile.h"
14
15 static int
16 frame_cmp(gconstpointer a, gconstpointer b, gpointer user_data _U_)
17 {
18   const frame_data *fdata1 = (const frame_data *) a;
19   const frame_data *fdata2 = (const frame_data *) b;
20
21   return (fdata1->num < fdata2->num) ? -1 :
22     (fdata1->num > fdata2->num) ? 1 :
23     0;
24 }
25
26 const char *
27 cap_file_provider_get_interface_name(struct packet_provider_data *prov, guint32 interface_id)
28 {
29   wtapng_iface_descriptions_t *idb_info;
30   wtap_block_t wtapng_if_descr = NULL;
31   char* interface_name;
32
33   idb_info = wtap_file_get_idb_info(prov->wth);
34
35   if (interface_id < idb_info->interface_data->len)
36     wtapng_if_descr = g_array_index(idb_info->interface_data, wtap_block_t, interface_id);
37
38   g_free(idb_info);
39
40   if (wtapng_if_descr) {
41     if (wtap_block_get_string_option_value(wtapng_if_descr, OPT_IDB_NAME, &interface_name) == WTAP_OPTTYPE_SUCCESS)
42       return interface_name;
43     if (wtap_block_get_string_option_value(wtapng_if_descr, OPT_IDB_DESCR, &interface_name) == WTAP_OPTTYPE_SUCCESS)
44       return interface_name;
45     if (wtap_block_get_string_option_value(wtapng_if_descr, OPT_IDB_HARDWARE, &interface_name) == WTAP_OPTTYPE_SUCCESS)
46       return interface_name;
47   }
48   return "unknown";
49 }
50
51 const char *
52 cap_file_provider_get_interface_description(struct packet_provider_data *prov, guint32 interface_id)
53 {
54   wtapng_iface_descriptions_t *idb_info;
55   wtap_block_t wtapng_if_descr = NULL;
56   char* interface_name;
57
58   idb_info = wtap_file_get_idb_info(prov->wth);
59
60   if (interface_id < idb_info->interface_data->len)
61     wtapng_if_descr = g_array_index(idb_info->interface_data, wtap_block_t, interface_id);
62
63   g_free(idb_info);
64
65   if (wtapng_if_descr) {
66     if (wtap_block_get_string_option_value(wtapng_if_descr, OPT_IDB_DESCR, &interface_name) == WTAP_OPTTYPE_SUCCESS)
67       return interface_name;
68   }
69   return NULL;
70 }
71
72 const char *
73 cap_file_provider_get_user_comment(struct packet_provider_data *prov, const frame_data *fd)
74 {
75   if (prov->frames_user_comments)
76      return (const char *)g_tree_lookup(prov->frames_user_comments, fd);
77
78   /* g_warning? */
79   return NULL;
80 }
81
82 void
83 cap_file_provider_set_user_comment(struct packet_provider_data *prov, frame_data *fd, const char *new_comment)
84 {
85   if (!prov->frames_user_comments)
86     prov->frames_user_comments = g_tree_new_full(frame_cmp, NULL, NULL, g_free);
87
88   /* insert new packet comment */
89   g_tree_replace(prov->frames_user_comments, fd, g_strdup(new_comment));
90
91   fd->has_user_comment = TRUE;
92 }