diff options
author | Gerald Combs <gerald@wireshark.org> | 2011-10-06 02:43:51 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2011-10-06 02:43:51 +0000 |
commit | aae5eb7de0e2fd5a257d143852b832039ebb171e (patch) | |
tree | b9c208af602c18c76518ee3e16f0e18b5a8e2df4 /epan/geoip_db.c | |
parent | b9a03ec9ae3f2b33f6961a235cc6ecaa01669d42 (diff) | |
download | wireshark-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.c | 14 |
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 = '.'; |