summaryrefslogtreecommitdiffstats
path: root/file.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-09 03:01:37 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-09 03:01:37 +0000
commit60385df6c3aab8be45f44d9ba653acc3ab801e8d (patch)
treeee5c29067d333789322732406e68d729e417aa77 /file.c
parentce5f356e7151bacfb9a9b9a6b81ac3fe91a25253 (diff)
downloadruby-60385df6c3aab8be45f44d9ba653acc3ab801e8d.tar.gz
ruby-60385df6c3aab8be45f44d9ba653acc3ab801e8d.tar.xz
ruby-60385df6c3aab8be45f44d9ba653acc3ab801e8d.zip
* file.c (stat_data_type): typed.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@24807 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/file.c b/file.c
index a212668f9..b872002c2 100644
--- a/file.c
+++ b/file.c
@@ -180,6 +180,17 @@ rb_file_path(VALUE obj)
return rb_obj_taint(rb_str_dup(fptr->pathv));
}
+static size_t
+stat_memsize(const void *p)
+{
+ return p ? sizeof(struct stat) : 0;
+}
+
+static const rb_data_type_t stat_data_type = {
+ "stat",
+ NULL, RUBY_TYPED_DEFAULT_FREE, stat_memsize,
+};
+
static VALUE
stat_new_0(VALUE klass, struct stat *st)
{
@@ -189,7 +200,7 @@ stat_new_0(VALUE klass, struct stat *st)
nst = ALLOC(struct stat);
*nst = *st;
}
- return Data_Wrap_Struct(klass, NULL, -1, nst);
+ return TypedData_Wrap_Struct(klass, &stat_data_type, nst);
}
static VALUE
@@ -202,7 +213,7 @@ static struct stat*
get_stat(VALUE self)
{
struct stat* st;
- Data_Get_Struct(self, struct stat, st);
+ TypedData_Get_Struct(self, struct stat, &stat_data_type, st);
if (!st) rb_raise(rb_eTypeError, "uninitialized File::Stat");
return st;
}
@@ -679,7 +690,7 @@ rb_stat_inspect(VALUE self)
};
struct stat* st;
- Data_Get_Struct(self, struct stat, st);
+ TypedData_Get_Struct(self, struct stat, &stat_data_type, st);
if (!st) {
return rb_sprintf("#<%s: uninitialized>", rb_obj_classname(self));
}