@@ -48,11 +48,11 @@ static void lua_pushmsgpack(lua_State *l, msgpack_object *o)
48
48
break ;
49
49
50
50
case MSGPACK_OBJECT_POSITIVE_INTEGER :
51
- lua_pushnumber (l , (double ) o -> via .u64 );
51
+ lua_pushinteger (l , (double ) o -> via .u64 );
52
52
break ;
53
53
54
54
case MSGPACK_OBJECT_NEGATIVE_INTEGER :
55
- lua_pushnumber (l , (double ) o -> via .i64 );
55
+ lua_pushinteger (l , (double ) o -> via .i64 );
56
56
break ;
57
57
58
58
case MSGPACK_OBJECT_FLOAT32 :
@@ -157,6 +157,22 @@ static void try_to_convert_data_type(struct lua_filter *lf,
157
157
lua_tomsgpack (lf , pck , 0 );
158
158
}
159
159
160
+ static int lua_isinteger (lua_State * L , int index )
161
+ {
162
+ lua_Number n ;
163
+ lua_Integer i ;
164
+
165
+ if (lua_type (L , index ) == LUA_TNUMBER ) {
166
+ n = lua_tonumber (L , index );
167
+ i = lua_tointeger (L , index );
168
+
169
+ if (i == n ) {
170
+ return 1 ;
171
+ }
172
+ }
173
+ return 0 ;
174
+ }
175
+
160
176
static void lua_tomsgpack (struct lua_filter * lf , msgpack_packer * pck , int index )
161
177
{
162
178
int len ;
@@ -177,8 +193,14 @@ static void lua_tomsgpack(struct lua_filter *lf, msgpack_packer *pck, int index)
177
193
break ;
178
194
case LUA_TNUMBER :
179
195
{
180
- double num = lua_tonumber (l , -1 + index );
181
- msgpack_pack_double (pck , num );
196
+ if (lua_isinteger (l , -1 + index )) {
197
+ int64_t num = lua_tointeger (l , -1 + index );
198
+ msgpack_pack_int64 (pck , num );
199
+ }
200
+ else {
201
+ double num = lua_tonumber (l , -1 + index );
202
+ msgpack_pack_double (pck , num );
203
+ }
182
204
}
183
205
break ;
184
206
case LUA_TBOOLEAN :
@@ -411,12 +433,15 @@ static int cb_lua_filter(const void *data, size_t bytes,
411
433
/* Get timestamp */
412
434
flb_time_pop_from_msgpack (& t , & result , & p );
413
435
t_orig = t ;
414
- ts = flb_time_to_double (& t );
415
436
416
437
/* Prepare function call, pass 3 arguments, expect 3 return values */
417
438
lua_getglobal (ctx -> lua -> state , ctx -> call );
418
439
lua_pushstring (ctx -> lua -> state , tag );
440
+
441
+ /* Timestamp */
442
+ ts = flb_time_to_double (& t );
419
443
lua_pushnumber (ctx -> lua -> state , ts );
444
+
420
445
lua_pushmsgpack (ctx -> lua -> state , p );
421
446
if (ctx -> protected_mode ) {
422
447
ret = lua_pcall (ctx -> lua -> state , 3 , 3 , 0 );
@@ -458,7 +483,7 @@ static int cb_lua_filter(const void *data, size_t bytes,
458
483
if (l_code == 1 ) {
459
484
flb_time_from_double (& t , l_timestamp );
460
485
}
461
- else if (l_code == 2 ) {
486
+ else if (l_code == 2 ) {
462
487
/* Keep the timestamp */
463
488
t = t_orig ;
464
489
}
0 commit comments