* ext/socket/mkconstants.rb (gen_name_to_int_func): generate
name_to_int functions, not only body. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21389 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c9ef4fc52f
commit
2f31ea3c86
@ -1,3 +1,8 @@
|
|||||||
|
Thu Jan 8 22:59:30 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* ext/socket/mkconstants.rb (gen_name_to_int_func): generate
|
||||||
|
name_to_int functions, not only body.
|
||||||
|
|
||||||
Thu Jan 8 22:44:10 2009 Tanaka Akira <akr@fsij.org>
|
Thu Jan 8 22:44:10 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* ext/socket/socket.c: don't use AI_NUMERICSERV for platforms which
|
* ext/socket/socket.c: don't use AI_NUMERICSERV for platforms which
|
||||||
|
@ -104,13 +104,19 @@ def each_names_with_len(pat, prefix_optional=nil)
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var, retp_var, pat, prefix_optional=nil)")
|
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func(funcname, pat, prefix_optional, guard=nil)")
|
||||||
switch (<%=len_var%>) {
|
%if guard
|
||||||
|
#ifdef <%=guard%>
|
||||||
|
%end
|
||||||
|
static int
|
||||||
|
<%=funcname%>(char *str, int len, int *valp)
|
||||||
|
{
|
||||||
|
switch (len) {
|
||||||
% each_names_with_len(pat, prefix_optional) {|pairs, len|
|
% each_names_with_len(pat, prefix_optional) {|pairs, len|
|
||||||
case <%=len%>:
|
case <%=len%>:
|
||||||
% pairs.each {|name, const|
|
% pairs.each {|name, const|
|
||||||
#ifdef <%=const%>
|
#ifdef <%=const%>
|
||||||
if (memcmp(<%=str_var%>, <%=c_str name%>, <%=len%>) == 0) { *<%=retp_var%> = <%=const%>; return 0; }
|
if (memcmp(str, <%=c_str name%>, <%=len%>) == 0) { *valp = <%=const%>; return 0; }
|
||||||
#endif
|
#endif
|
||||||
% }
|
% }
|
||||||
return -1;
|
return -1;
|
||||||
@ -119,6 +125,10 @@ ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var,
|
|||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
%if guard
|
||||||
|
#endif
|
||||||
|
%end
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
def reverse_each_name_with_prefix_optional(pat, prefix_pat)
|
def reverse_each_name_with_prefix_optional(pat, prefix_pat)
|
||||||
@ -201,55 +211,14 @@ init_constants(VALUE mConst)
|
|||||||
<%= INTERN_DEFS.map {|decl, gen_hash, func| gen_hash }.join("\n") %>
|
<%= INTERN_DEFS.map {|decl, gen_hash, func| gen_hash }.join("\n") %>
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
<%= gen_name_to_int_func("family_to_int", /\A(AF_|PF_)/, "AF_") %>
|
||||||
family_to_int(char *str, int len, int *valp)
|
<%= gen_name_to_int_func("socktype_to_int", /\ASOCK_/, "SOCK_") %>
|
||||||
{
|
<%= gen_name_to_int_func("level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) %>
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\A[AP]F_/, "AF_") %>
|
<%= gen_name_to_int_func("so_optname_to_int", /\ASO_/, "SO_") %>
|
||||||
}
|
<%= gen_name_to_int_func("ip_optname_to_int", /\AIP_/, "IP_") %>
|
||||||
|
<%= gen_name_to_int_func("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") %>
|
||||||
static int
|
<%= gen_name_to_int_func("tcp_optname_to_int", /\ATCP_/, "TCP_") %>
|
||||||
socktype_to_int(char *str, int len, int *valp)
|
<%= gen_name_to_int_func("udp_optname_to_int", /\AUDP_/, "UDP_") %>
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\ASOCK_/, "SOCK_") %>
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
level_to_int(char *str, int len, int *valp)
|
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) %>
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
so_optname_to_int(char *str, int len, int *valp)
|
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\ASO_/, "SO_") %>
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ip_optname_to_int(char *str, int len, int *valp)
|
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\AIP_/, "IP_") %>
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef IPPROTO_IPV6
|
|
||||||
static int
|
|
||||||
ipv6_optname_to_int(char *str, int len, int *valp)
|
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\AIPV6_/, "IPV6_") %>
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int
|
|
||||||
tcp_optname_to_int(char *str, int len, int *valp)
|
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\ATCP_/, "TCP_") %>
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
udp_optname_to_int(char *str, int len, int *valp)
|
|
||||||
{
|
|
||||||
<%= gen_name_to_int("str", "len", "valp", /\AUDP_/, "UDP_") %>
|
|
||||||
}
|
|
||||||
|
|
||||||
<%= INTERN_DEFS.map {|decl, gen_hash, func| func }.join("\n") %>
|
<%= INTERN_DEFS.map {|decl, gen_hash, func| func }.join("\n") %>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user