summaryrefslogtreecommitdiffhomepage
path: root/libs/luci-lib-jsonc/src
diff options
context:
space:
mode:
Diffstat (limited to 'libs/luci-lib-jsonc/src')
-rw-r--r--libs/luci-lib-jsonc/src/Makefile2
-rw-r--r--libs/luci-lib-jsonc/src/jsonc.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/libs/luci-lib-jsonc/src/Makefile b/libs/luci-lib-jsonc/src/Makefile
index e15fbac382..f79423d1ff 100644
--- a/libs/luci-lib-jsonc/src/Makefile
+++ b/libs/luci-lib-jsonc/src/Makefile
@@ -7,7 +7,7 @@ JSONC_LIB = jsonc.so
$(CC) $(CPPFLAGS) $(CFLAGS) $(LUA_CFLAGS) $(JSONC_CFLAGS) $(FPIC) -c -o $@ $<
compile: $(JSONC_OBJ)
- $(CC) $(LDFLAGS) -shared -o $(JSONC_LIB) $(JSONC_OBJ) $(JSONC_LDFLAGS)
+ $(CC) $(LDFLAGS) -shared -o $(JSONC_LIB) $(JSONC_OBJ) $(JSONC_LDFLAGS) $(FPIC)
install: compile
mkdir -p $(DESTDIR)/usr/lib/lua/luci
diff --git a/libs/luci-lib-jsonc/src/jsonc.c b/libs/luci-lib-jsonc/src/jsonc.c
index 2f56a4a688..5abb738f5f 100644
--- a/libs/luci-lib-jsonc/src/jsonc.c
+++ b/libs/luci-lib-jsonc/src/jsonc.c
@@ -294,7 +294,7 @@ static bool visited(struct seen **sp, const void *ptr) {
static struct json_object * _lua_to_json_rec(lua_State *L, int index,
struct seen **seen)
{
- lua_Number nd, ni;
+ lua_Number nd;
struct json_object *obj;
const char *key;
int i, max;
@@ -364,11 +364,13 @@ static struct json_object * _lua_to_json_rec(lua_State *L, int index,
return json_object_new_boolean(lua_toboolean(L, index));
case LUA_TNUMBER:
+ if (lua_isinteger(L, index))
+ return json_object_new_int64(lua_tointeger(L, index));
+
nd = lua_tonumber(L, index);
- ni = lua_tointeger(L, index);
- if (nd == ni)
- return json_object_new_int(nd);
+ if (isfinite(nd) && trunc(nd) == nd)
+ return json_object_new_int64(nd);
return json_object_new_double(nd);