aboutsummaryrefslogtreecommitdiffstats
path: root/dir.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2023-11-21 13:31:05 -0500
committerPeter Zhu <peter@peterzhu.ca>2023-11-22 09:36:54 -0500
commitb040c529a0bf98a22f180c82d2a63db626e4fac5 (patch)
tree9afcc8121d6838171f2bb361c94908071f14ae41 /dir.c
parentb45442f8a81c793d1d6a0ce65a3aa856ae4452d5 (diff)
downloadruby-b040c529a0bf98a22f180c82d2a63db626e4fac5.tar.gz
Implement dir on VWA
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/dir.c b/dir.c
index 05cf369035..ce5a90ebf7 100644
--- a/dir.c
+++ b/dir.c
@@ -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)