diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2014-06-14 13:35:01 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2014-06-14 13:35:01 -0700 |
commit | 4d056c20768cb8e5a8169ee5d6bf46fc82e19f19 (patch) | |
tree | 965f4729fe66738b9018d3d04391dbad80a0c443 /ext/ffi_yajl | |
parent | 31c6704a67038fd85b1e70e5f72f1b82626f9f2a (diff) | |
download | ffi-yajl-4d056c20768cb8e5a8169ee5d6bf46fc82e19f19.tar.gz |
allow_comments support for C ext
Diffstat (limited to 'ext/ffi_yajl')
-rw-r--r-- | ext/ffi_yajl/ext/parser/parser.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/ext/ffi_yajl/ext/parser/parser.c b/ext/ffi_yajl/ext/parser/parser.c index f9f5cc2..5100e2d 100644 --- a/ext/ffi_yajl/ext/parser/parser.c +++ b/ext/ffi_yajl/ext/parser/parser.c @@ -164,15 +164,15 @@ static yajl_callbacks callbacks = { end_array_callback, }; -int get_symbolize_keys(VALUE self) { +int get_opts_key(VALUE self, char *key) { VALUE opts = rb_iv_get(self, "@opts"); if (TYPE(opts) != T_HASH) { rb_raise(rb_eTypeError, "opts is not a valid hash"); } - return rb_hash_aref(opts, ID2SYM(rb_intern("symbolize_keys"))) == Qtrue; + return rb_hash_aref(opts, ID2SYM(rb_intern(key))) == Qtrue; } -static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE opts) { +static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE yajl_opts) { yajl_handle hand; yajl_status stat; unsigned char *err; @@ -182,9 +182,14 @@ static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE opts) { rb_ivar_set(self, rb_intern("key_stack"), rb_ary_new()); ctx.self = self; - ctx.symbolizeKeys = get_symbolize_keys(self); + ctx.symbolizeKeys = get_opts_key(self, "symbolize_keys"); hand = yajl_alloc(&callbacks, NULL, (void *)&ctx); + + if (rb_hash_aref(yajl_opts, ID2SYM(rb_intern("yajl_allow_comments")))) { + yajl_config(hand, yajl_allow_comments, 1); + } + if ((stat = yajl_parse(hand, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str))) != yajl_status_ok) { err = yajl_get_error(hand, 1, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str)); goto raise; |