summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-15 08:57:01 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-15 08:57:01 +0000
commit73768d54d3af644dab3dc3a5fd12aa75961f3c28 (patch)
treef64b946659b54a76d59093e01895052ff2d294bc /io.c
parent2a5ddef59feb5b79e097e8b9de1b1f2b3b37b887 (diff)
* io.c (argf_type): make typed data.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/io.c b/io.c
index 3e184f2995..fc4fba7aa2 100644
--- a/io.c
+++ b/io.c
@@ -7133,6 +7133,21 @@ argf_free(void *ptr)
xfree(p);
}
+static size_t
+argf_memsize(const void *ptr)
+{
+ const struct argf *p = ptr;
+ size_t size = sizeof(*p);
+ if (!ptr) return 0;
+ if (p->inplace) size += strlen(p->inplace) + 1;
+ return size;
+}
+
+static const rb_data_type_t argf_type = {
+ "ARGF",
+ {argf_mark, argf_free, argf_memsize},
+};
+
static inline void
argf_init(struct argf *p, VALUE v)
{
@@ -7146,7 +7161,7 @@ static VALUE
argf_alloc(VALUE klass)
{
struct argf *p;
- VALUE argf = Data_Make_Struct(klass, struct argf, argf_mark, argf_free, p);
+ VALUE argf = TypedData_Make_Struct(klass, struct argf, &argf_type, p);
argf_init(p, Qnil);
return argf;