summaryrefslogtreecommitdiff
path: root/epan/geoip_db.c
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2011-10-06 02:43:51 +0000
committerGerald Combs <gerald@wireshark.org>2011-10-06 02:43:51 +0000
commitaae5eb7de0e2fd5a257d143852b832039ebb171e (patch)
treeb9c208af602c18c76518ee3e16f0e18b5a8e2df4 /epan/geoip_db.c
parentb9a03ec9ae3f2b33f6961a235cc6ecaa01669d42 (diff)
downloadwireshark-aae5eb7de0e2fd5a257d143852b832039ebb171e.tar.gz
Don't break strict aliasing rules.
svn path=/trunk/; revision=39287
Diffstat (limited to 'epan/geoip_db.c')
-rw-r--r--epan/geoip_db.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/epan/geoip_db.c b/epan/geoip_db.c
index 6cdc5a5bc8..f7df2c905d 100644
--- a/epan/geoip_db.c
+++ b/epan/geoip_db.c
@@ -357,24 +357,26 @@ geoip_db_lookup_latlon6(geoipv6_t addr _U_, float *lat _U_, float *lon _U_) {
const char *
geoip_db_lookup_ipv6(guint dbnum, struct e_in6_addr addr, char *not_found) {
GeoIP *gi;
- const geoipv6_t *gaddr = (geoipv6_t *) &addr;
+ geoipv6_t gaddr;
const char *ret = not_found;
static char val[VAL_STR_LEN];
#if NUM_DB_TYPES > 31
GeoIPRecord *gir;
#endif
+ memcpy(&gaddr, &addr, sizeof(addr));
+
gi = g_array_index(geoip_dat_arr, GeoIP *, dbnum);
if (gi) {
switch (gi->databaseType) {
case GEOIP_COUNTRY_EDITION_V6:
- ret = GeoIP_country_name_by_ipnum_v6(gi, *gaddr);
+ ret = GeoIP_country_name_by_ipnum_v6(gi, gaddr);
break;
#if NUM_DB_TYPES > 31
case GEOIP_CITY_EDITION_REV0_V6:
case GEOIP_CITY_EDITION_REV1_V6:
- gir = GeoIP_record_by_ipnum_v6(gi, *gaddr);
+ gir = GeoIP_record_by_ipnum_v6(gi, gaddr);
if (gir && gir->city && gir->region) {
g_snprintf(val, VAL_STR_LEN, "%s, %s", gir->city, gir->region);
ret = val;
@@ -387,7 +389,7 @@ geoip_db_lookup_ipv6(guint dbnum, struct e_in6_addr addr, char *not_found) {
case GEOIP_ORG_EDITION_V6:
case GEOIP_ISP_EDITION_V6:
case GEOIP_ASNUM_EDITION_V6:
- ret = GeoIP_name_by_ipnum_v6(gi, *gaddr);
+ ret = GeoIP_name_by_ipnum_v6(gi, gaddr);
break;
#endif /* NUM_DB_TYPES */
@@ -396,7 +398,7 @@ geoip_db_lookup_ipv6(guint dbnum, struct e_in6_addr addr, char *not_found) {
float lat;
float lon;
char *c;
- if(geoip_db_lookup_latlon6(*gaddr, &lat, &lon) == 0) {
+ if(geoip_db_lookup_latlon6(gaddr, &lat, &lon) == 0) {
g_snprintf(val, VAL_STR_LEN, "%f", lat);
c = strchr(val, ',');
if (c != NULL) *c = '.';
@@ -410,7 +412,7 @@ geoip_db_lookup_ipv6(guint dbnum, struct e_in6_addr addr, char *not_found) {
float lat;
float lon;
char *c;
- if(geoip_db_lookup_latlon6(*gaddr, &lat, &lon) == 0) {
+ if(geoip_db_lookup_latlon6(gaddr, &lat, &lon) == 0) {
g_snprintf(val, VAL_STR_LEN, "%f", lon);
c = strchr(val, ',');
if (c != NULL) *c = '.';