summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-28 07:17:55 +0000
committerNobuyoshi Nakada <nobu@ruby-lang.org>2015-05-28 16:19:43 +0900
commitfae344f2f12a73baf0d4afa663eee3d942aeec8e (patch)
tree82ddecaa902579a5f56b2c8f5d00e1399df5c5f3
parent6020ec8585cb0ee9d5b0166b27fa53ca1170653e (diff)
downloadjson-fae344f2f12a73baf0d4afa663eee3d942aeec8e.tar.gz
generator.c: allocate structs with wrapper
* ext/json/ext/generator/generator.c (cState_s_allocate): allocate structs with making new wrapper objects and get rid of potential memory leak. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ext/json/ext/generator/generator.c11
-rw-r--r--ext/json/ext/generator/generator.h5
2 files changed, 5 insertions, 11 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
index 90285be..6300c64 100644
--- a/ext/json/ext/generator/generator.c
+++ b/ext/json/ext/generator/generator.c
@@ -526,16 +526,11 @@ static const rb_data_type_t JSON_Generator_State_type = {
};
#endif
-static JSON_Generator_State *State_allocate(void)
-{
- JSON_Generator_State *state = ZALLOC(JSON_Generator_State);
- return state;
-}
-
static VALUE cState_s_allocate(VALUE klass)
{
- JSON_Generator_State *state = State_allocate();
- return TypedData_Wrap_Struct(klass, &JSON_Generator_State_type, state);
+ JSON_Generator_State *state;
+ return TypedData_Make_Struct(klass, JSON_Generator_State,
+ &JSON_Generator_State_type, state);
}
/*
diff --git a/ext/json/ext/generator/generator.h b/ext/json/ext/generator/generator.h
index 416159a..298c0a4 100644
--- a/ext/json/ext/generator/generator.h
+++ b/ext/json/ext/generator/generator.h
@@ -112,7 +112,6 @@ static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self);
static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self);
static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self);
static void State_free(void *state);
-static JSON_Generator_State *State_allocate(void);
static VALUE cState_s_allocate(VALUE klass);
static VALUE cState_configure(VALUE self, VALUE opts);
static VALUE cState_to_h(VALUE self);
@@ -156,11 +155,11 @@ static inline void *ruby_zalloc(size_t n)
return p;
}
#endif
-#ifdef TypedData_Wrap_Struct
+#ifdef TypedData_Make_Struct
static const rb_data_type_t JSON_Generator_State_type;
#define NEW_TYPEDDATA_WRAPPER 1
#else
-#define TypedData_Wrap_Struct(klass, ignore, json) Data_Wrap_Struct(klass, NULL, State_free, json)
+#define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, State_free, json)
#define TypedData_Get_Struct(self, JSON_Generator_State, ignore, json) Data_Get_Struct(self, JSON_Generator_State, json)
#endif