diff --git a/c_src/encoder.c b/c_src/encoder.c index 3e1cf21..7d9d321 100644 --- a/c_src/encoder.c +++ b/c_src/encoder.c @@ -330,13 +330,20 @@ enc_string(Encoder* e, ERL_NIF_TERM val) } static inline int -enc_long(Encoder* e, long val) +enc_long(Encoder* e, ErlNifSInt64 val) { if(!enc_ensure(e, 32)) { return 0; } +#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_)) snprintf(&(e->p[e->i]), 32, "%ld", val); +#elif SIZEOF_LONG == 8 + snprintf(&(e->p[e->i]), 32, "%ld", val); +#else + snprintf(&(e->p[e->i]), 32, "%lld", val); +#endif + e->i += strlen(&(e->p[e->i])); e->count++; @@ -421,8 +428,8 @@ encode(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) ERL_NIF_TERM item; const ERL_NIF_TERM* tuple; int arity; + ErlNifSInt64 lval; double dval; - long lval; if(argc != 2) { return enif_make_badarg(env); diff --git a/test/003-numbers.t b/test/003-numbers.t index 162f845..a64fa6b 100755 --- a/test/003-numbers.t +++ b/test/003-numbers.t @@ -6,7 +6,7 @@ main([]) -> code:add_pathz("ebin"), code:add_pathz("test"), - etap:plan(57), + etap:plan(59), util:test_good(good()), util:test_errors(errors()), etap:end_tests(). @@ -19,6 +19,7 @@ good() -> {<<"12">>, 12}, {<<"-3">>, -3}, {<<"1234567890123456789012345">>, 1234567890123456789012345}, + {<<"1310050760199">>, 1310050760199}, { <<"1234567890123456789012345.0">>, 1.23456789012345678e24,