浏览代码

Implemented with_trailer support

pull/71/head
lwalkin 10 年前
父节点
当前提交
661b23acf4
共有 2 个文件被更改,包括 20 次插入4 次删除
  1. +14
    -3
      c_src/decoder.c
  2. +6
    -1
      test/jiffy_15_trailer_tests.erl

+ 14
- 3
c_src/decoder.c 查看文件

@ -730,6 +730,7 @@ decode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
Decoder* d;
jiffy_st* st = (jiffy_st*) enif_priv_data(env);
ERL_NIF_TERM bin_term = argv[0];
ErlNifBinary bin;
ERL_NIF_TERM objs;
@ -740,7 +741,7 @@ decode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
if(argc != 5) {
return enif_make_badarg(env);
} else if(!enif_inspect_binary(env, argv[0], &bin)) {
} else if(!enif_inspect_binary(env, bin_term, &bin)) {
return enif_make_badarg(env);
} else if(!enif_get_resource(env, argv[1], st->res_dec, (void**) &d)) {
return enif_make_badarg(env);
@ -1038,8 +1039,16 @@ decode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
d->i++;
break;
default:
ret = dec_error(d, "invalid_trailing_data");
goto done;
if(d->with_trailer) {
ERL_NIF_TERM trailer = enif_make_sub_binary(env,
bin_term, d->i, bin.size - d->i);
val = enif_make_tuple3(env, d->atoms->atom_with_trailer,
val, trailer);
goto soft_done;
} else {
ret = dec_error(d, "invalid_trailing_data");
goto done;
}
}
break;
@ -1049,6 +1058,8 @@ decode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
}
soft_done:
if(dec_curr(d) != st_done) {
ret = dec_error(d, "truncated_json");
} else if(d->is_partial) {

+ 6
- 1
test/jiffy_15_trailer_tests.erl 查看文件

@ -6,6 +6,11 @@
-include_lib("eunit/include/eunit.hrl").
trailer_test_() ->
Opts = [with_trailer],
{"trailer", [
?_assertEqual(true, jiffy:decode(<<"true">>, [with_trailer]))
?_assertEqual(true, jiffy:decode(<<"true">>, Opts)),
?_assertMatch({with_trailer, true, <<";">>}, jiffy:decode(<<"true;">>, Opts)),
?_assertMatch({with_trailer, true, <<"[]">>}, jiffy:decode(<<"true[]">>, Opts)),
?_assertMatch({with_trailer, [], <<"{}">>}, jiffy:decode(<<"[]{}">>, Opts)),
?_assertMatch({with_trailer, 1, <<"2 3">>}, jiffy:decode(<<"1 2 3">>, Opts))
]}.

正在加载...
取消
保存