diff options
-rw-r--r-- | ext/json/fbuffer/fbuffer.h | 29 | ||||
-rw-r--r-- | ext/json/generator/generator.c | 3 | ||||
-rw-r--r-- | ext/json/generator/generator.h | 1 | ||||
-rw-r--r-- | ext/json/parser/parser.c | 2 | ||||
-rw-r--r-- | ext/json/parser/parser.rl | 2 |
5 files changed, 30 insertions, 7 deletions
@@ -4,13 +4,20 @@ #include "ruby.h" #include "ruby/encoding.h" typedef struct FBufferStruct { unsigned long initial_length; - char *ptr; unsigned long len; unsigned long capa; } FBuffer; #define FBUFFER_INITIAL_LENGTH_DEFAULT 1024 #define FBUFFER_PTR(fb) ((fb)->ptr) @@ -35,14 +42,21 @@ static VALUE fbuffer_to_s(FBuffer *fb); #define RB_UNLIKELY(expr) expr #endif -static void fbuffer_init(FBuffer *fb, unsigned long initial_length) { fb->initial_length = (initial_length > 0) ? initial_length : FBUFFER_INITIAL_LENGTH_DEFAULT; } static void fbuffer_free(FBuffer *fb) { - if (fb->ptr) ruby_xfree(fb->ptr); } #ifndef JSON_GENERATOR @@ -65,7 +79,14 @@ static inline void fbuffer_inc_capa(FBuffer *fb, unsigned long requested) for (required = fb->capa; requested > required - fb->len; required <<= 1); if (required > fb->capa) { - REALLOC_N(fb->ptr, char, required); fb->capa = required; } } @@ -954,8 +954,9 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj, void (*func)(FBuffer { GET_STATE(self); FBuffer buffer = {0}; - fbuffer_init(&buffer, state->buffer_initial_length); struct generate_json_data data = { .buffer = &buffer, @@ -54,6 +54,7 @@ typedef struct JSON_Generator_StateStruct { JSON_Generator_State *state; \ GET_STATE_TO(self, state) static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self); static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self); #ifdef RUBY_INTEGER_UNIFICATION @@ -2159,7 +2159,7 @@ static VALUE cJSON_parser_s_allocate(VALUE klass) { JSON_Parser *json; VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); - fbuffer_init(&json->fbuffer, 0); return obj; } @@ -919,7 +919,7 @@ static VALUE cJSON_parser_s_allocate(VALUE klass) { JSON_Parser *json; VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); - fbuffer_init(&json->fbuffer, 0); return obj; } |