aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua
diff options
context:
space:
mode:
authorJoão Valverde <joao.valverde@tecnico.ulisboa.pt>2015-11-26 04:44:52 +0000
committerJoão Valverde <j@v6e.pt>2016-02-07 23:22:30 +0000
commit13ec77a9fc3af3b0b502820d0b55796c89997896 (patch)
treec5f5f72f090efd5471cf95095b00e13efa407959 /epan/wslua
parentd762a895ab570680e4e72142a348ad2b07c97d4f (diff)
Add free_address_wmem() and other extensions to address API
Try to improve 'address' API (to be easier/safer) and also avoid some constness warnings by not overloading the 'data' pointer to store malloc'ed buffers (use private pointer for that instead). Change-Id: I7456516b12c67620ceadac447907c12f5905bd49 Reviewed-on: https://code.wireshark.org/review/13463 Petri-Dish: João Valverde <j@v6e.pt> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: João Valverde <j@v6e.pt>
Diffstat (limited to 'epan/wslua')
-rw-r--r--epan/wslua/wslua_address.c42
-rw-r--r--epan/wslua/wslua_field.c20
-rw-r--r--epan/wslua/wslua_tvb.c27
3 files changed, 33 insertions, 56 deletions
diff --git a/epan/wslua/wslua_address.c b/epan/wslua/wslua_address.c
index 30e4565be2..0516884b43 100644
--- a/epan/wslua/wslua_address.c
+++ b/epan/wslua/wslua_address.c
@@ -43,14 +43,14 @@ WSLUA_CONSTRUCTOR Address_ip(lua_State* L) {
#define WSLUA_ARG_Address_ip_HOSTNAME 1 /* The address or name of the IP host. */
Address addr = (Address)g_malloc(sizeof(address));
- guint32* ip_addr = (guint32 *)g_malloc(sizeof(guint32));
+ guint32 ip_addr;
const gchar* name = luaL_checkstring(L,WSLUA_ARG_Address_ip_HOSTNAME);
- if (! get_host_ipaddr(name, (guint32*)ip_addr)) {
- *ip_addr = 0;
+ if (! get_host_ipaddr(name, &ip_addr)) {
+ ip_addr = 0;
}
- set_address(addr, AT_IPv4, 4, ip_addr);
+ alloc_address_wmem(NULL, addr, AT_IPv4, 4, &ip_addr);
pushAddress(L,addr);
WSLUA_RETURN(1); /* The Address object. */
}
@@ -60,7 +60,7 @@ WSLUA_CONSTRUCTOR Address_ip(lua_State* L) {
static int Address_ipv6(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -68,7 +68,7 @@ static int Address_ipv6(lua_State* L) {
static int Address_ss7(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -76,7 +76,7 @@ static int Address_ss7(lua_State* L) {
static int Address_eth(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -84,7 +84,7 @@ static int Address_eth(lua_State* L) {
static int Address_sna(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -92,7 +92,7 @@ static int Address_sna(lua_State* L) {
static int Address_atalk(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -100,7 +100,7 @@ static int Address_atalk(lua_State* L) {
static int Address_vines(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -108,7 +108,7 @@ static int Address_vines(lua_State* L) {
static int Address_osi(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -116,7 +116,7 @@ static int Address_osi(lua_State* L) {
static int Address_arcnet(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -124,7 +124,7 @@ static int Address_arcnet(lua_State* L) {
static int Address_fc(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -132,7 +132,7 @@ static int Address_fc(lua_State* L) {
static int Address_string(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -140,7 +140,7 @@ static int Address_string(lua_State* L) {
static int Address_eui64(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -148,7 +148,7 @@ static int Address_eui64(lua_State* L) {
static int Address_uri(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -156,7 +156,7 @@ static int Address_uri(lua_State* L) {
static int Address_tipc(lua_State* L) {
Address addr = g_malloc(sizeof(address));
- set_address(addr, AT_NONE, 4, g_malloc(4));
+ /* alloc_address() */
pushAddress(L,addr);
return 1;
@@ -186,11 +186,11 @@ WSLUA_METHODS Address_methods[] = {
WSLUA_METAMETHOD Address__tostring(lua_State* L) {
Address addr = checkAddress(L,1);
- const gchar *str = address_to_display(NULL, addr);
+ gchar *str = address_to_display(NULL, addr);
lua_pushstring(L, str);
- wmem_free(NULL, (void*) str);
+ wmem_free(NULL, str);
WSLUA_RETURN(1); /* The string representing the address. */
}
@@ -200,8 +200,8 @@ static int Address__gc(lua_State* L) {
Address addr = toAddress(L,1);
if (addr) {
- g_free((void*)(addr->data));
- g_free((void*)(addr));
+ free_address(addr);
+ g_free(addr);
}
return 0;
diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c
index fc1a46f62a..0bb3e26774 100644
--- a/epan/wslua/wslua_field.c
+++ b/epan/wslua/wslua_field.c
@@ -124,41 +124,31 @@ WSLUA_METAMETHOD FieldInfo__call(lua_State* L) {
}
case FT_ETHER: {
Address eth = (Address)g_malloc(sizeof(address));
- eth->type = AT_ETHER;
- eth->len = fi->ws_fi->length;
- eth->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+ alloc_address_tvb(NULL,eth,AT_ETHER,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
pushAddress(L,eth);
return 1;
}
case FT_IPv4:{
Address ipv4 = (Address)g_malloc(sizeof(address));
- ipv4->type = AT_IPv4;
- ipv4->len = fi->ws_fi->length;
- ipv4->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+ alloc_address_tvb(NULL,ipv4,AT_IPv4,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
pushAddress(L,ipv4);
return 1;
}
case FT_IPv6: {
Address ipv6 = (Address)g_malloc(sizeof(address));
- ipv6->type = AT_IPv6;
- ipv6->len = fi->ws_fi->length;
- ipv6->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+ alloc_address_tvb(NULL,ipv6,AT_IPv6,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
pushAddress(L,ipv6);
return 1;
}
case FT_FCWWN: {
Address fcwwn = (Address)g_malloc(sizeof(address));
- fcwwn->type = AT_FCWWN;
- fcwwn->len = fi->ws_fi->length;
- fcwwn->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+ alloc_address_tvb(NULL,fcwwn,AT_FCWWN,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
pushAddress(L,fcwwn);
return 1;
}
case FT_IPXNET:{
Address ipx = (Address)g_malloc(sizeof(address));
- ipx->type = AT_IPX;
- ipx->len = fi->ws_fi->length;
- ipx->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+ alloc_address_tvb(NULL,ipx,AT_IPX,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
pushAddress(L,ipx);
return 1;
}
diff --git a/epan/wslua/wslua_tvb.c b/epan/wslua/wslua_tvb.c
index 0a7e903498..b6c2d824da 100644
--- a/epan/wslua/wslua_tvb.c
+++ b/epan/wslua/wslua_tvb.c
@@ -751,7 +751,6 @@ WSLUA_METHOD TvbRange_ipv4(lua_State* L) {
/* Get an IPv4 Address from a `TvbRange`, as an `Address` object. */
TvbRange tvbr = checkTvbRange(L,1);
Address addr;
- guint32* ip_addr;
if ( !(tvbr && tvbr->tvb)) return 0;
if (tvbr->tvb->expired) {
@@ -764,12 +763,8 @@ WSLUA_METHOD TvbRange_ipv4(lua_State* L) {
return 0;
}
- addr = (address *)g_malloc(sizeof(address));
-
- ip_addr = (guint32 *)g_malloc(sizeof(guint32));
- *ip_addr = tvb_get_ipv4(tvbr->tvb->ws_tvb,tvbr->offset);
-
- set_address(addr, AT_IPv4, 4, ip_addr);
+ addr = g_new(address,1);
+ alloc_address_tvb(NULL,addr,AT_IPv4,sizeof(guint32),tvbr->tvb->ws_tvb,tvbr->offset);
pushAddress(L,addr);
WSLUA_RETURN(1); /* The IPv4 `Address` object. */
@@ -779,7 +774,7 @@ WSLUA_METHOD TvbRange_le_ipv4(lua_State* L) {
/* Get an Little Endian IPv4 Address from a `TvbRange`, as an `Address` object. */
TvbRange tvbr = checkTvbRange(L,1);
Address addr;
- guint32* ip_addr;
+ guint32 ip_addr;
if ( !(tvbr && tvbr->tvb)) return 0;
if (tvbr->tvb->expired) {
@@ -792,13 +787,9 @@ WSLUA_METHOD TvbRange_le_ipv4(lua_State* L) {
return 0;
}
- addr = (address *)g_malloc(sizeof(address));
-
- ip_addr = (guint32 *)g_malloc(sizeof(guint32));
- *ip_addr = tvb_get_ipv4(tvbr->tvb->ws_tvb,tvbr->offset);
- *((guint32 *)ip_addr) = GUINT32_SWAP_LE_BE(*((guint32 *)ip_addr));
-
- set_address(addr, AT_IPv4, 4, ip_addr);
+ addr = g_new(address,1);
+ ip_addr = GUINT32_SWAP_LE_BE(tvb_get_ipv4(tvbr->tvb->ws_tvb,tvbr->offset));
+ alloc_address_wmem(NULL, addr, AT_IPv4, sizeof(ip_addr), &ip_addr);
pushAddress(L,addr);
WSLUA_RETURN(1); /* The IPv4 `Address` object. */
@@ -808,7 +799,6 @@ WSLUA_METHOD TvbRange_ether(lua_State* L) {
/* Get an Ethernet Address from a `TvbRange`, as an `Address` object. */
TvbRange tvbr = checkTvbRange(L,1);
Address addr;
- guint8* buff;
if ( !(tvbr && tvbr->tvb)) return 0;
if (tvbr->tvb->expired) {
@@ -822,10 +812,7 @@ WSLUA_METHOD TvbRange_ether(lua_State* L) {
}
addr = g_new(address,1);
-
- buff = (guint8 *)tvb_memdup(NULL,tvbr->tvb->ws_tvb,tvbr->offset,tvbr->len);
-
- set_address(addr, AT_ETHER, 6, buff);
+ alloc_address_tvb(NULL,addr,AT_ETHER,6,tvbr->tvb->ws_tvb,tvbr->offset);
pushAddress(L,addr);
WSLUA_RETURN(1); /* The Ethernet `Address` object. */