diff options
Diffstat (limited to 'ext/dbm/dbm.c')
-rw-r--r-- | ext/dbm/dbm.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index fec06a0dac..1f69f68a5a 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -47,7 +47,6 @@ closed_dbm(void) #define GetDBM(obj, dbmp) do {\ TypedData_Get_Struct((obj), struct dbmdata, &dbm_type, (dbmp));\ - if ((dbmp) == 0) closed_dbm();\ if ((dbmp)->di_dbm == 0) closed_dbm();\ } while (0) @@ -115,8 +114,6 @@ fdbm_closed(VALUE obj) struct dbmdata *dbmp; TypedData_Get_Struct(obj, struct dbmdata, &dbm_type, dbmp); - if (dbmp == 0) - return Qtrue; if (dbmp->di_dbm == 0) return Qtrue; @@ -126,7 +123,9 @@ fdbm_closed(VALUE obj) static VALUE fdbm_alloc(VALUE klass) { - return TypedData_Wrap_Struct(klass, &dbm_type, 0); + struct dbmdata *dbmp; + + return TypedData_Make_Struct(klass, struct dbmdata, &dbm_type, dbmp); } /* @@ -150,6 +149,7 @@ fdbm_initialize(int argc, VALUE *argv, VALUE obj) struct dbmdata *dbmp; int mode, flags = 0; + TypedData_Get_Struct(obj, struct dbmdata, &dbm_type, dbmp); if (rb_scan_args(argc, argv, "12", &file, &vmode, &vflags) == 1) { mode = 0666; /* default value */ } @@ -228,8 +228,8 @@ fdbm_initialize(int argc, VALUE *argv, VALUE obj) rb_sys_fail_str(file); } - dbmp = ALLOC(struct dbmdata); - DATA_PTR(obj) = dbmp; + if (dbmp->di_dbm) + dbm_close(dbmp->di_dbm); dbmp->di_dbm = dbm; dbmp->di_size = -1; |