forked from osmocom/wireshark
Lua: Add "tonumber" method to NSTime
Absolute and Relative time fields could not be converted to seconds without converting to string and parsing to number. Fixed conversion in generated code that was subject to precision loss Usage: f=Field.new("frame.delta_time") delta=f().value:tonumber() Change-Id: I6ef91c6238a6c2ed9adf6cae03f8913f0a09332e Reviewed-on: https://code.wireshark.org/review/22316 Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
parent
16f70b9bb1
commit
59add43eec
|
@ -43,8 +43,8 @@ my %types = %{{
|
|||
'address' => '{ Address a = (Address)g_malloc(sizeof(address)); copy_address(a, &(v->STR)); pushAddress(L,a); }',
|
||||
'address*' => '{ Address a = (Address)g_malloc(sizeof(address)); copy_address(a, v->STR); pushAddress(L,a); }',
|
||||
'int' => 'lua_pushnumber(L,(lua_Number)v->STR);',
|
||||
'nstime_t' => '{ lua_Number t = (lua_Number) v->STR.secs; t += v->STR.nsecs * 1e-9; lua_pushnumber(L,t); }',
|
||||
'nstime_t*' => '{ lua_Number t = (lua_Number) v->STR->secs; t += v->STR->nsecs * 1e-9; lua_pushnumber(L,t); }',
|
||||
'nstime_t' => 'lua_pushnumber(L,(lua_Number)nstime_to_sec(&(v->STR)));',
|
||||
'nstime_t*' => 'lua_pushnumber(L,(lua_Number)nstime_to_sec(v->STR));'
|
||||
}};
|
||||
|
||||
my %comments = %{{
|
||||
|
@ -164,6 +164,8 @@ print CFILE <<"HEADER";
|
|||
|
||||
#include "wslua.h"
|
||||
|
||||
#include <wsutil/nstime.h>
|
||||
|
||||
HEADER
|
||||
|
||||
print DOCFILE "\n";
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "config.h"
|
||||
|
||||
#include "wslua.h"
|
||||
|
||||
#include <wsutil/nstime.h>
|
||||
|
||||
/* WSLUA_CONTINUE_MODULE Pinfo */
|
||||
|
||||
|
@ -61,6 +61,15 @@ WSLUA_METAMETHOD NSTime__call(lua_State* L) { /* Creates a NSTime object. */
|
|||
WSLUA_RETURN(NSTime_new(L)); /* The new NSTime object. */
|
||||
}
|
||||
|
||||
WSLUA_METHOD NSTime_tonumber(lua_State* L) {
|
||||
/* Returns a Lua number of the `NSTime` representing seconds from epoch
|
||||
* @since 2.4.0
|
||||
* */
|
||||
NSTime nstime = checkNSTime(L,1);
|
||||
lua_pushnumber(L, (lua_Number)nstime_to_sec(nstime));
|
||||
WSLUA_RETURN(1); /* The Lua number. */
|
||||
}
|
||||
|
||||
WSLUA_METAMETHOD NSTime__tostring(lua_State* L) {
|
||||
NSTime nstime = checkNSTime(L,1);
|
||||
gchar *str;
|
||||
|
@ -174,6 +183,7 @@ WSLUA_ATTRIBUTES NSTime_attributes[] = {
|
|||
|
||||
WSLUA_METHODS NSTime_methods[] = {
|
||||
WSLUA_CLASS_FNREG(NSTime,new),
|
||||
WSLUA_CLASS_FNREG(NSTime,tonumber),
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ end
|
|||
-- note ip only runs 3 times because it gets removed
|
||||
-- and bootp only runs twice because the filter makes it run
|
||||
-- once and then it gets replaced with a different one for the second time
|
||||
local taptests = { [FRAME]=4, [OTHER]=37 }
|
||||
local taptests = { [FRAME]=4, [OTHER]=40 }
|
||||
local function getResults()
|
||||
print("\n-----------------------------\n")
|
||||
for k,v in pairs(taptests) do
|
||||
|
@ -132,13 +132,16 @@ test("NSTime.tostring-32", tostring(first) == "0.000000000")
|
|||
test("NSTime.tostring-33", tostring(second) == "100.000000100")
|
||||
test("NSTime.tostring-34", tostring(third) == "0.000000100")
|
||||
|
||||
test("NSTime.tonumber-35", first:tonumber() == 0.0)
|
||||
test("NSTime.tonumber-36", second:tonumber() == 100.0000001)
|
||||
test("NSTime.tonumber-37", third:tonumber() == 0.0000001)
|
||||
|
||||
testing(OTHER,"setters/getters")
|
||||
first.secs = 123
|
||||
first.nsecs = 100
|
||||
test("NSTime.set-35", first == NSTime(123,100))
|
||||
test("NSTime.get-36", first.secs == 123)
|
||||
test("NSTime.get-37", first.nsecs == 100)
|
||||
test("NSTime.set-38", first == NSTime(123,100))
|
||||
test("NSTime.get-39", first.secs == 123)
|
||||
test("NSTime.get-40", first.nsecs == 100)
|
||||
|
||||
|
||||
----------------------------------
|
||||
|
|
Loading…
Reference in New Issue