mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/socket/mkconstants.rb: generate family_to_str.
* ext/socket/socket.c (ipaddr): use family_to_str. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9787d4faae
commit
175561f8dd
3 changed files with 56 additions and 23 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Thu Jan 1 19:36:57 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* ext/socket/mkconstants.rb: generate family_to_str.
|
||||||
|
|
||||||
|
* ext/socket/socket.c (ipaddr): use family_to_str.
|
||||||
|
|
||||||
Thu Jan 1 17:37:12 2009 Tanaka Akira <akr@fsij.org>
|
Thu Jan 1 17:37:12 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* ext/socket/mkconstants.rb: generate socktype_to_int.
|
* ext/socket/mkconstants.rb: generate socktype_to_int.
|
||||||
|
|
|
@ -93,6 +93,43 @@ ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var,
|
||||||
}
|
}
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
|
MAYBE_ALIAS = [
|
||||||
|
["AF_UNIX", "AF_LOCAL"]
|
||||||
|
]
|
||||||
|
|
||||||
|
def each_alias(pat)
|
||||||
|
h = {}
|
||||||
|
each_name(pat) {|name|
|
||||||
|
h[name] = [name]
|
||||||
|
}
|
||||||
|
MAYBE_ALIAS.each {|names|
|
||||||
|
a = []
|
||||||
|
names.each {|n|
|
||||||
|
a << n if h.delete n
|
||||||
|
}
|
||||||
|
h[a.first] = a
|
||||||
|
}
|
||||||
|
h.each_value {|names|
|
||||||
|
yield names
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name(int_var, pat)")
|
||||||
|
switch (<%=int_var%>) {
|
||||||
|
% each_alias(pat) {|names|
|
||||||
|
% names.each_with_index {|n, i|
|
||||||
|
% cond = ["defined(#{n})"]
|
||||||
|
% (0...i).each {|j| cond << "(!defined(#{names[j]}) || #{n} != #{names[j]})" }
|
||||||
|
#if <%=cond.join(" && ")%>
|
||||||
|
case <%=n%>: return <%=c_str n%>;
|
||||||
|
#endif
|
||||||
|
% }
|
||||||
|
% }
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
EOS
|
||||||
|
|
||||||
result << ERB.new(<<'EOS', nil, '%').result(binding)
|
result << ERB.new(<<'EOS', nil, '%').result(binding)
|
||||||
static void
|
static void
|
||||||
init_constants(VALUE mConst)
|
init_constants(VALUE mConst)
|
||||||
|
@ -127,6 +164,12 @@ socktype_to_int(char *str, int len)
|
||||||
<%= gen_name_to_int("str", "len", /\ASOCK_/) %>
|
<%= gen_name_to_int("str", "len", /\ASOCK_/) %>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
family_to_str(int val)
|
||||||
|
{
|
||||||
|
<%= gen_int_to_name("val", /\AAF_/) %>
|
||||||
|
}
|
||||||
|
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
if opt_o
|
if opt_o
|
||||||
|
|
|
@ -981,6 +981,8 @@ sock_addrinfo(VALUE host, VALUE port, int socktype, int flags)
|
||||||
return sock_getaddrinfo(host, port, &hints);
|
return sock_getaddrinfo(host, port, &hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *family_to_str(int val);
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
ipaddr(struct sockaddr *sockaddr, int norevlookup)
|
ipaddr(struct sockaddr *sockaddr, int norevlookup)
|
||||||
{
|
{
|
||||||
|
@ -988,32 +990,14 @@ ipaddr(struct sockaddr *sockaddr, int norevlookup)
|
||||||
VALUE ary;
|
VALUE ary;
|
||||||
int error;
|
int error;
|
||||||
char hbuf[1024], pbuf[1024];
|
char hbuf[1024], pbuf[1024];
|
||||||
|
char *name;
|
||||||
|
|
||||||
switch (sockaddr->sa_family) {
|
name = family_to_str(sockaddr->sa_family);
|
||||||
case AF_UNSPEC:
|
if (name)
|
||||||
family = rb_str_new2("AF_UNSPEC");
|
family = rb_str_new2(name);
|
||||||
break;
|
else {
|
||||||
case AF_INET:
|
|
||||||
family = rb_str_new2("AF_INET");
|
|
||||||
break;
|
|
||||||
#ifdef INET6
|
|
||||||
case AF_INET6:
|
|
||||||
family = rb_str_new2("AF_INET6");
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef AF_LOCAL
|
|
||||||
case AF_LOCAL:
|
|
||||||
family = rb_str_new2("AF_LOCAL");
|
|
||||||
break;
|
|
||||||
#elif AF_UNIX
|
|
||||||
case AF_UNIX:
|
|
||||||
family = rb_str_new2("AF_UNIX");
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
sprintf(pbuf, "unknown:%d", sockaddr->sa_family);
|
sprintf(pbuf, "unknown:%d", sockaddr->sa_family);
|
||||||
family = rb_str_new2(pbuf);
|
family = rb_str_new2(pbuf);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addr1 = Qnil;
|
addr1 = Qnil;
|
||||||
|
|
Loading…
Add table
Reference in a new issue