diff options
author | Peter Zhu <peter@peterzhu.ca> | 2023-11-21 13:31:05 -0500 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2023-11-22 09:36:54 -0500 |
commit | b040c529a0bf98a22f180c82d2a63db626e4fac5 (patch) | |
tree | 9afcc8121d6838171f2bb361c94908071f14ae41 /dir.c | |
parent | b45442f8a81c793d1d6a0ce65a3aa856ae4452d5 (diff) | |
download | ruby-b040c529a0bf98a22f180c82d2a63db626e4fac5.tar.gz |
Implement dir on VWA
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 17 |
1 files changed, 7 insertions, 10 deletions
@@ -471,13 +471,6 @@ dir_free(void *ptr) struct dir_data *dir = ptr; if (dir->dir) closedir(dir->dir); - xfree(dir); -} - -static size_t -dir_memsize(const void *ptr) -{ - return sizeof(struct dir_data); } RUBY_REFERENCES_START(dir_refs) @@ -486,8 +479,12 @@ RUBY_REFERENCES_END static const rb_data_type_t dir_data_type = { "dir", - {REFS_LIST_PTR(dir_refs), dir_free, dir_memsize,}, - 0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_DECL_MARKING + { + REFS_LIST_PTR(dir_refs), + dir_free, + NULL, // Nothing allocated externally, so don't need a memsize function + }, + 0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE }; static VALUE dir_close(VALUE); @@ -3116,7 +3113,7 @@ push_glob(VALUE ary, VALUE str, VALUE base, int flags) fd = AT_FDCWD; if (!NIL_P(base)) { if (!RB_TYPE_P(base, T_STRING) || !rb_enc_check(str, base)) { - struct dir_data *dirp = DATA_PTR(base); + struct dir_data *dirp = RTYPEDDATA_GET_DATA(base); if (!dirp->dir) dir_closed(); #ifdef HAVE_DIRFD if ((fd = dirfd(dirp->dir)) == -1) |