88
99VALUE cSqlite3Backup ;
1010
11- static void deallocate ( void * ctx )
11+ static size_t backup_memsize ( const void * data )
1212{
13- sqlite3BackupRubyPtr c = (sqlite3BackupRubyPtr )ctx ;
14- xfree (c );
13+ sqlite3BackupRubyPtr ctx = (sqlite3BackupRubyPtr )data ;
14+ // NB: can't account for ctx->p because the type is incomplete.
15+ return sizeof (* ctx );
1516}
1617
18+ static const rb_data_type_t backup_type = {
19+ "SQLite3::Backup" ,
20+ {
21+ NULL ,
22+ RUBY_TYPED_DEFAULT_FREE ,
23+ backup_memsize ,
24+ },
25+ 0 ,
26+ 0 ,
27+ RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED ,
28+ };
29+
1730static VALUE allocate (VALUE klass )
1831{
19- sqlite3BackupRubyPtr ctx = xcalloc (( size_t ) 1 , sizeof ( sqlite3BackupRuby )) ;
20- return Data_Wrap_Struct (klass , NULL , deallocate , ctx );
32+ sqlite3BackupRubyPtr ctx ;
33+ return TypedData_Make_Struct (klass , sqlite3BackupRuby , & backup_type , ctx );
2134}
2235
2336/* call-seq: SQLite3::Backup.new(dstdb, dstname, srcdb, srcname)
@@ -62,7 +75,7 @@ static VALUE initialize(VALUE self, VALUE dstdb, VALUE dstname, VALUE srcdb, VAL
6275 sqlite3RubyPtr ddb_ctx , sdb_ctx ;
6376 sqlite3_backup * pBackup ;
6477
65- Data_Get_Struct (self , sqlite3BackupRuby , ctx );
78+ TypedData_Get_Struct (self , sqlite3BackupRuby , & backup_type , ctx );
6679 Data_Get_Struct (dstdb , sqlite3Ruby , ddb_ctx );
6780 Data_Get_Struct (srcdb , sqlite3Ruby , sdb_ctx );
6881
@@ -97,7 +110,7 @@ static VALUE step(VALUE self, VALUE nPage)
97110 sqlite3BackupRubyPtr ctx ;
98111 int status ;
99112
100- Data_Get_Struct (self , sqlite3BackupRuby , ctx );
113+ TypedData_Get_Struct (self , sqlite3BackupRuby , & backup_type , ctx );
101114 REQUIRE_OPEN_BACKUP (ctx );
102115 status = sqlite3_backup_step (ctx -> p , NUM2INT (nPage ));
103116 return INT2NUM (status );
@@ -111,7 +124,7 @@ static VALUE finish(VALUE self)
111124{
112125 sqlite3BackupRubyPtr ctx ;
113126
114- Data_Get_Struct (self , sqlite3BackupRuby , ctx );
127+ TypedData_Get_Struct (self , sqlite3BackupRuby , & backup_type , ctx );
115128 REQUIRE_OPEN_BACKUP (ctx );
116129 (void )sqlite3_backup_finish (ctx -> p );
117130 ctx -> p = NULL ;
@@ -129,7 +142,7 @@ static VALUE remaining(VALUE self)
129142{
130143 sqlite3BackupRubyPtr ctx ;
131144
132- Data_Get_Struct (self , sqlite3BackupRuby , ctx );
145+ TypedData_Get_Struct (self , sqlite3BackupRuby , & backup_type , ctx );
133146 REQUIRE_OPEN_BACKUP (ctx );
134147 return INT2NUM (sqlite3_backup_remaining (ctx -> p ));
135148}
@@ -145,7 +158,7 @@ static VALUE pagecount(VALUE self)
145158{
146159 sqlite3BackupRubyPtr ctx ;
147160
148- Data_Get_Struct (self , sqlite3BackupRuby , ctx );
161+ TypedData_Get_Struct (self , sqlite3BackupRuby , & backup_type , ctx );
149162 REQUIRE_OPEN_BACKUP (ctx );
150163 return INT2NUM (sqlite3_backup_pagecount (ctx -> p ));
151164}
0 commit comments