diff options
author | Anders Broman <a.broman58@gmail.com> | 2015-02-12 08:33:02 +0000 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-02-12 08:34:05 +0000 |
commit | 53228c4bd8d64dae077c90496da738c0da75f20f (patch) | |
tree | dcd8a243e2e7cc228af511678dc4d93eade9f8bc | |
parent | 797ea88aefc2f45dba7e77d2dcaebe68ac1a4fac (diff) | |
download | wireshark-53228c4bd8d64dae077c90496da738c0da75f20f.tar.gz |
Revert "Make get_manuf_name return a const string."
This reverts commit 797ea88aefc2f45dba7e77d2dcaebe68ac1a4fac.
Change-Id: I9bc2cef0051d88c6374c6f1868b0250cba3edbd4
Reviewed-on: https://code.wireshark.org/review/7076
Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r-- | debian/libwireshark0.symbols | 1 | ||||
-rw-r--r-- | epan/addr_resolv.c | 116 | ||||
-rw-r--r-- | epan/addr_resolv.h | 8 | ||||
-rw-r--r-- | epan/address_types.c | 10 | ||||
-rw-r--r-- | epan/dissectors/packet-nhrp.c | 4 | ||||
-rw-r--r-- | ui/gtk/addr_resolution_dlg.c | 4 |
6 files changed, 51 insertions, 92 deletions
diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols index 311751dc31..bcf216b9aa 100644 --- a/debian/libwireshark0.symbols +++ b/debian/libwireshark0.symbols @@ -643,7 +643,6 @@ libwireshark.so.0 libwireshark0 #MINVER# get_hash_ether_status@Base 1.99.3 get_hash_ether_hexaddr@Base 1.99.3 get_hash_ether_resolved_name@Base 1.99.3 - get_hash_manuf_resolved_name@Base 1.99.3 get_host_ipaddr6@Base 1.9.1 get_host_ipaddr@Base 1.9.1 get_hostlist_filter@Base 1.99.0 diff --git a/epan/addr_resolv.c b/epan/addr_resolv.c index b24ad07796..171b891829 100644 --- a/epan/addr_resolv.c +++ b/epan/addr_resolv.c @@ -198,15 +198,8 @@ typedef struct hashether { char hexaddr[6*3]; char resolved_name[MAXNAMELEN]; } hashether_t; - -typedef struct hashmanuf { - guint status; /* (See above) */ - guint8 addr[3]; - char hexaddr[3*3]; - char resolved_name[MAXNAMELEN]; -} hashmanuf_t; - /* internal ethernet type */ + typedef struct _ether { guint8 addr[6]; @@ -214,6 +207,7 @@ typedef struct _ether } ether_t; /* internal ipxnet type */ + typedef struct _ipxnet { guint addr; @@ -1264,39 +1258,12 @@ get_ethbyaddr(const guint8 *addr) } /* get_ethbyaddr */ -static hashmanuf_t *manuf_hash_new_entry(const guint8 *addr, char* name) -{ - int *manuf_key; - hashmanuf_t *manuf_value; - char *endp; - - /* manuf needs only the 3 most significant octets of the ethernet address */ - manuf_key = (int *)g_new(int, 1); - *manuf_key = (int)((addr[0] << 16) + (addr[1] << 8) + addr[2]); - manuf_value = g_new(hashmanuf_t, 1); - - memcpy(manuf_value->addr, addr, 3); - manuf_value->status = (name != NULL) ? HASHETHER_STATUS_RESOLVED_NAME : HASHETHER_STATUS_UNRESOLVED; - if (name != NULL) { - g_strlcpy(manuf_value->resolved_name, name, MAXNAMELEN); - manuf_value->status = HASHETHER_STATUS_RESOLVED_NAME; - } - else { - manuf_value->status = HASHETHER_STATUS_UNRESOLVED; - manuf_value->resolved_name[0] = '\0'; - } - /* Values returned by bytes_to_hexstr_punct() are *not* null-terminated */ - endp = bytes_to_hexstr_punct(manuf_value->hexaddr, addr, sizeof(manuf_value->hexaddr), ':'); - *endp = '\0'; - - g_hash_table_insert(manuf_hashtable, manuf_key, manuf_value); - return manuf_value; -} static void add_manuf_name(const guint8 *addr, unsigned int mask, gchar *name) { guint8 *wka_key; + int *manuf_key; /* * XXX - can we use Standard Annotation Language annotations to @@ -1313,7 +1280,12 @@ add_manuf_name(const guint8 *addr, unsigned int mask, gchar *name) if (mask == 0) { /* This is a manufacturer ID; add it to the manufacturer ID hash table */ - manuf_hash_new_entry(addr, name); + + /* manuf needs only the 3 most significant octets of the ethernet address */ + manuf_key = (int *)g_new(int, 1); + *manuf_key = (int)((addr[0] << 16) + (addr[1] << 8) + addr[2]); + + g_hash_table_insert(manuf_hashtable, manuf_key, g_strdup(name)); return; } /* mask == 0 */ @@ -1327,12 +1299,12 @@ add_manuf_name(const guint8 *addr, unsigned int mask, gchar *name) } /* add_manuf_name */ -static hashmanuf_t * +static gchar * manuf_name_lookup(const guint8 *addr) { gint32 manuf_key = 0; guint8 oct; - hashmanuf_t *manuf_value; + gchar *name; /* manuf needs only the 3 most significant octets of the ethernet address */ manuf_key = addr[0]; @@ -1345,9 +1317,9 @@ manuf_name_lookup(const guint8 *addr) /* first try to find a "perfect match" */ - manuf_value = (hashmanuf_t*)g_hash_table_lookup(manuf_hashtable, &manuf_key); - if (manuf_value != NULL) { - return manuf_value; + name = (gchar *)g_hash_table_lookup(manuf_hashtable, &manuf_key); + if(name != NULL){ + return name; } /* Mask out the broadcast/multicast flag but not the locally @@ -1357,14 +1329,13 @@ manuf_name_lookup(const guint8 *addr) * 0x02 locally administered bit */ if((manuf_key & 0x00010000) != 0){ manuf_key &= 0x00FEFFFF; - manuf_value = (hashmanuf_t*)g_hash_table_lookup(manuf_hashtable, &manuf_key); - if (manuf_value != NULL) { - return manuf_value; + name = (gchar *)g_hash_table_lookup(manuf_hashtable, &manuf_key); + if(name != NULL){ + return name; } } - /* Add the address as a hex string */ - return manuf_hash_new_entry(addr, NULL); + return NULL; } /* manuf_name_lookup */ @@ -1488,7 +1459,6 @@ eth_name_lookup_cleanup(void) static hashether_t * eth_addr_resolve(hashether_t *tp) { ether_t *eth; - hashmanuf_t *manuf_value; const guint8 *addr = tp->addr; if ( (eth = get_ethbyaddr(addr)) != NULL) { @@ -1545,10 +1515,9 @@ eth_addr_resolve(hashether_t *tp) { } /* Now try looking in the manufacturer table. */ - manuf_value = manuf_name_lookup(addr); - if ((manuf_value != NULL) && (manuf_value->status != HASHETHER_STATUS_UNRESOLVED)) { + if ((name = manuf_name_lookup(addr)) != NULL) { g_snprintf(tp->resolved_name, MAXNAMELEN, "%s_%02x:%02x:%02x", - manuf_value->resolved_name, addr[3], addr[4], addr[5]); + name, addr[3], addr[4], addr[5]); tp->status = HASHETHER_STATUS_RESOLVED_DUMMY; return tp; } @@ -3097,10 +3066,10 @@ get_ipxnet_addr(const gchar *name, gboolean *known) } /* get_ipxnet_addr */ -const gchar * -get_manuf_name(const guint8 *addr) +gchar * +get_manuf_name(wmem_allocator_t *allocator, const guint8 *addr) { - hashmanuf_t *manuf_value; + gchar *cur; int manuf_key; guint8 oct; @@ -3113,11 +3082,12 @@ get_manuf_name(const guint8 *addr) oct = addr[2]; manuf_key = manuf_key | oct; - manuf_value = manuf_name_lookup(addr); - if (gbl_resolv_flags.mac_name && manuf_value->status != HASHETHER_STATUS_UNRESOLVED) - return manuf_value->resolved_name; + if (!gbl_resolv_flags.mac_name || ((cur = (gchar *)g_hash_table_lookup(manuf_hashtable, &manuf_key)) == NULL)) { + cur=wmem_strdup_printf(allocator, "%02x:%02x:%02x", addr[0], addr[1], addr[2]); + return cur; + } - return manuf_value->hexaddr; + return wmem_strdup(allocator, cur); } /* get_manuf_name */ @@ -3129,19 +3099,19 @@ uint_get_manuf_name(const guint oid) addr[0] = (oid >> 16) & 0xFF; addr[1] = (oid >> 8) & 0xFF; addr[2] = (oid >> 0) & 0xFF; - return get_manuf_name(addr); + return get_manuf_name(wmem_packet_scope(), addr); } const gchar * tvb_get_manuf_name(tvbuff_t *tvb, gint offset) { - return get_manuf_name(tvb_get_ptr(tvb, offset, 3)); + return get_manuf_name(wmem_packet_scope(), tvb_get_ptr(tvb, offset, 3)); } const gchar * get_manuf_name_if_known(const guint8 *addr) { - hashmanuf_t *manuf_value; + gchar *cur; int manuf_key; guint8 oct; @@ -3154,26 +3124,24 @@ get_manuf_name_if_known(const guint8 *addr) oct = addr[2]; manuf_key = manuf_key | oct; - manuf_value = (hashmanuf_t *)g_hash_table_lookup(manuf_hashtable, &manuf_key); - if ((manuf_value == NULL) || (manuf_value->status != HASHETHER_STATUS_UNRESOLVED)) { + if ((cur = (gchar *)g_hash_table_lookup(manuf_hashtable, &manuf_key)) == NULL) { return NULL; } - return manuf_value->resolved_name; + return cur; } /* get_manuf_name_if_known */ const gchar * uint_get_manuf_name_if_known(const guint manuf_key) { - hashmanuf_t *manuf_value; + gchar *cur; - manuf_value = (hashmanuf_t *)g_hash_table_lookup(manuf_hashtable, &manuf_key); - if ((manuf_value == NULL) || (manuf_value->status != HASHETHER_STATUS_UNRESOLVED)) { + if ((cur = (gchar *)g_hash_table_lookup(manuf_hashtable, &manuf_key)) == NULL) { return NULL; } - return manuf_value->resolved_name; + return cur; } const gchar * @@ -3182,25 +3150,19 @@ tvb_get_manuf_name_if_known(tvbuff_t *tvb, gint offset) return get_manuf_name_if_known(tvb_get_ptr(tvb, offset, 3)); } -char* get_hash_manuf_resolved_name(hashmanuf_t* manuf) -{ - return manuf->resolved_name; -} - const gchar * eui64_to_display(wmem_allocator_t *allocator, const guint64 addr_eui64) { + gchar *name; guint8 *addr = (guint8 *)wmem_alloc(allocator, 8); - hashmanuf_t *manuf_value; /* Copy and convert the address to network byte order. */ *(guint64 *)(void *)(addr) = pntoh64(&(addr_eui64)); - manuf_value = manuf_name_lookup(addr); - if (!gbl_resolv_flags.mac_name || (manuf_value->status == HASHETHER_STATUS_UNRESOLVED)) { + if (!gbl_resolv_flags.mac_name || ((name = manuf_name_lookup(addr)) == NULL)) { return wmem_strdup_printf(allocator, "%02x:%02x:%02x%02x:%02x:%02x%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], addr[6], addr[7]); } - return wmem_strdup_printf(allocator, "%s_%02x:%02x:%02x:%02x:%02x", manuf_value->resolved_name, addr[3], addr[4], addr[5], addr[6], addr[7]); + return wmem_strdup_printf(allocator, "%s_%02x:%02x:%02x:%02x:%02x", name, addr[3], addr[4], addr[5], addr[6], addr[7]); } /* eui64_to_display */ diff --git a/epan/addr_resolv.h b/epan/addr_resolv.h index 068a741460..eda5885bb8 100644 --- a/epan/addr_resolv.h +++ b/epan/addr_resolv.h @@ -59,9 +59,6 @@ typedef struct _e_addr_resolve { struct hashether; typedef struct hashether hashether_t; -struct hashmanuf; -typedef struct hashmanuf hashmanuf_t; - typedef struct serv_port { gchar *udp_name; gchar *tcp_name; @@ -180,7 +177,7 @@ gchar *get_ether_name_if_known(const guint8 *addr); * Given a sequence of 3 octets containing an OID, get_manuf_name() * returns the vendor name, or "%02x:%02x:%02x" if not known. */ -extern const gchar *get_manuf_name(const guint8 *addr); +extern gchar *get_manuf_name(wmem_allocator_t *allocator, const guint8 *addr); /* * Given a sequence of 3 octets containing an OID, get_manuf_name_if_known() @@ -226,9 +223,6 @@ WS_DLL_PUBLIC guint get_hash_ether_status(hashether_t* ether); WS_DLL_PUBLIC char* get_hash_ether_hexaddr(hashether_t* ether); WS_DLL_PUBLIC char* get_hash_ether_resolved_name(hashether_t* ether); -WS_DLL_PUBLIC char* get_hash_manuf_resolved_name(hashmanuf_t* manuf); - - /* returns the ethernet address corresponding to name or NULL if not known */ extern guint8 *get_ether_addr(const gchar *name); diff --git a/epan/address_types.c b/epan/address_types.c index 4c447c6a94..61d3f52a2d 100644 --- a/epan/address_types.c +++ b/epan/address_types.c @@ -429,7 +429,7 @@ static gboolean fcwwn_to_str(const address* addr, gchar *buf, int buf_len) const guint8 *addrp = (const guint8*)addr->data; int fmt; guint8 oui[6]; - gchar *ethptr; + gchar *ethptr, *manuf_name; if (buf_len < 200) { /* This is mostly for manufacturer name */ g_strlcpy(buf, BUF_TOO_SMALL_ERR, buf_len); /* Let the unexpected value alert user */ @@ -444,7 +444,9 @@ static gboolean fcwwn_to_str(const address* addr, gchar *buf, int buf_len) case FC_NH_NAA_IEEE_E: memcpy (oui, &addrp[2], 6); - g_snprintf (ethptr, buf_len-23, " (%s)", get_manuf_name(oui)); + manuf_name = get_manuf_name(NULL, oui); + g_snprintf (ethptr, buf_len-23, " (%s)", manuf_name); + wmem_free(NULL, manuf_name); break; case FC_NH_NAA_IEEE_R: @@ -455,7 +457,9 @@ static gboolean fcwwn_to_str(const address* addr, gchar *buf, int buf_len) oui[4] = ((addrp[4] & 0x0F) << 4) | ((addrp[5] & 0xF0) >> 4); oui[5] = ((addrp[5] & 0x0F) << 4) | ((addrp[6] & 0xF0) >> 4); - g_snprintf (ethptr, buf_len-23, " (%s)", get_manuf_name(oui)); + manuf_name = get_manuf_name(NULL, oui); + g_snprintf (ethptr, buf_len-23, " (%s)", manuf_name); + wmem_free(NULL, manuf_name); break; default: diff --git a/epan/dissectors/packet-nhrp.c b/epan/dissectors/packet-nhrp.c index 06abf3fe83..dc35490cc6 100644 --- a/epan/dissectors/packet-nhrp.c +++ b/epan/dissectors/packet-nhrp.c @@ -920,10 +920,10 @@ static void dissect_nhrp_ext(tvbuff_t *tvb, tvb_memcpy(tvb, manuf, offset, 3); vendor_tree = proto_tree_add_subtree_format(nhrp_tree, tvb, offset, len, - ett_nhrp_vendor_ext, NULL, "Extension Data: Vendor ID=%s, Data=%s", get_manuf_name(manuf), + ett_nhrp_vendor_ext, NULL, "Extension Data: Vendor ID=%s, Data=%s", get_manuf_name(wmem_packet_scope(), manuf), tvb_bytes_to_str(wmem_packet_scope(), tvb, offset + 3, len - 3)); proto_tree_add_bytes_format_value(vendor_tree, hf_nhrp_vendor_ext_id, tvb, - offset, 3, manuf, "%s", get_manuf_name(manuf)); + offset, 3, manuf, "%s", get_manuf_name(wmem_packet_scope(), manuf)); if (len > 3) { proto_tree_add_item(vendor_tree, hf_nhrp_vendor_ext_data, tvb, offset + 3, len - 3, ENC_NA); } diff --git a/ui/gtk/addr_resolution_dlg.c b/ui/gtk/addr_resolution_dlg.c index cca7db805c..d7ec0a0ece 100644 --- a/ui/gtk/addr_resolution_dlg.c +++ b/ui/gtk/addr_resolution_dlg.c @@ -71,10 +71,10 @@ manuf_hash_to_texbuff(gpointer key, gpointer value, gpointer user_data) { gchar string_buff[ADDRESS_STR_MAX]; GtkTextBuffer *buffer = (GtkTextBuffer*)user_data; - hashmanuf_t *manuf = (hashmanuf_t*)value; + gchar *name = (gchar *)value; int eth_as_gint = *(int*)key; - g_snprintf(string_buff, ADDRESS_STR_MAX, "%.2X:%.2X:%.2X %s\n",eth_as_gint>>16, (eth_as_gint>>8)&0xff, eth_as_gint&0xff, get_hash_manuf_resolved_name(manuf)); + g_snprintf(string_buff, ADDRESS_STR_MAX, "%.2X:%.2X:%.2X %s\n",eth_as_gint>>16, (eth_as_gint>>8)&0xff, eth_as_gint&0xff,name); gtk_text_buffer_insert_at_cursor (buffer, string_buff, -1); } |