diff options
author | João Valverde <joao.valverde@tecnico.ulisboa.pt> | 2015-11-26 04:44:52 +0000 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2016-02-07 23:22:30 +0000 |
commit | 13ec77a9fc3af3b0b502820d0b55796c89997896 (patch) | |
tree | c5f5f72f090efd5471cf95095b00e13efa407959 /epan/wslua | |
parent | d762a895ab570680e4e72142a348ad2b07c97d4f (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.c | 42 | ||||
-rw-r--r-- | epan/wslua/wslua_field.c | 20 | ||||
-rw-r--r-- | epan/wslua/wslua_tvb.c | 27 |
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. */ |