* ext/socket/raddrinfo.c (addrinfo_type): typed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
815fccb4dc
commit
0ad3bee01f
@ -1,4 +1,6 @@
|
|||||||
Thu Dec 31 05:56:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Thu Dec 31 06:03:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/socket/raddrinfo.c (addrinfo_type): typed.
|
||||||
|
|
||||||
* ext/socket/extconf.rb: fix for wide-getaddrinfo option.
|
* ext/socket/extconf.rb: fix for wide-getaddrinfo option.
|
||||||
|
|
||||||
|
@ -479,36 +479,39 @@ typedef struct {
|
|||||||
} rb_addrinfo_t;
|
} rb_addrinfo_t;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
addrinfo_mark(rb_addrinfo_t *rai)
|
addrinfo_mark(void *ptr)
|
||||||
{
|
{
|
||||||
|
rb_addrinfo_t *rai = ptr;
|
||||||
if (rai) {
|
if (rai) {
|
||||||
rb_gc_mark(rai->inspectname);
|
rb_gc_mark(rai->inspectname);
|
||||||
rb_gc_mark(rai->canonname);
|
rb_gc_mark(rai->canonname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
#define addrinfo_free RUBY_TYPED_DEFAULT_FREE
|
||||||
addrinfo_free(rb_addrinfo_t *rai)
|
|
||||||
|
static size_t
|
||||||
|
addrinfo_memsize(const void *ptr)
|
||||||
{
|
{
|
||||||
xfree(rai);
|
return ptr ? sizeof(rb_addrinfo_t) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const rb_data_type_t addrinfo_type = {
|
||||||
|
"socket/addrinfo",
|
||||||
|
addrinfo_mark, addrinfo_free, addrinfo_memsize,
|
||||||
|
};
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
addrinfo_s_allocate(VALUE klass)
|
addrinfo_s_allocate(VALUE klass)
|
||||||
{
|
{
|
||||||
return Data_Wrap_Struct(klass, addrinfo_mark, addrinfo_free, 0);
|
return TypedData_Wrap_Struct(klass, &addrinfo_type, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IS_ADDRINFO(obj) (RDATA(obj)->dmark == (RUBY_DATA_FUNC)addrinfo_mark)
|
#define IS_ADDRINFO(obj) rb_typeddata_is_kind_of(obj, &addrinfo_type)
|
||||||
static rb_addrinfo_t *
|
static inline rb_addrinfo_t *
|
||||||
check_addrinfo(VALUE self)
|
check_addrinfo(VALUE self)
|
||||||
{
|
{
|
||||||
Check_Type(self, RUBY_T_DATA);
|
return rb_check_typeddata(self, &addrinfo_type);
|
||||||
if (!IS_ADDRINFO(self)) {
|
|
||||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected Addrinfo)",
|
|
||||||
rb_class2name(CLASS_OF(self)));
|
|
||||||
}
|
|
||||||
return DATA_PTR(self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static rb_addrinfo_t *
|
static rb_addrinfo_t *
|
||||||
@ -2040,7 +2043,7 @@ VALUE
|
|||||||
rsock_sockaddr_string_value(volatile VALUE *v)
|
rsock_sockaddr_string_value(volatile VALUE *v)
|
||||||
{
|
{
|
||||||
VALUE val = *v;
|
VALUE val = *v;
|
||||||
if (TYPE(val) == RUBY_T_DATA && IS_ADDRINFO(val)) {
|
if (IS_ADDRINFO(val)) {
|
||||||
*v = addrinfo_to_sockaddr(val);
|
*v = addrinfo_to_sockaddr(val);
|
||||||
}
|
}
|
||||||
StringValue(*v);
|
StringValue(*v);
|
||||||
@ -2057,7 +2060,7 @@ rsock_sockaddr_string_value_ptr(volatile VALUE *v)
|
|||||||
VALUE
|
VALUE
|
||||||
rb_check_sockaddr_string_type(VALUE val)
|
rb_check_sockaddr_string_type(VALUE val)
|
||||||
{
|
{
|
||||||
if (TYPE(val) == RUBY_T_DATA && IS_ADDRINFO(val))
|
if (IS_ADDRINFO(val))
|
||||||
return addrinfo_to_sockaddr(val);
|
return addrinfo_to_sockaddr(val);
|
||||||
return rb_check_string_type(val);
|
return rb_check_string_type(val);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user