From 810dd43a207e74141f450f30bd239185ce49df2d Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 9 Feb 2009 14:23:53 +0000 Subject: [PATCH] * ext/socket/constants.c (level_arg): use unknown_level_to_int for non internet protocol. (optname_arg): use only so_optname_to_int for non internet protocol. (cmsg_type_arg): use only scm_optname_to_int for non internet protocol. * ext/socket/mkconstants.rb: generate unknown_level_to_int. rename iplevel_to_int to ip_level_to_int. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 11 +++++ ext/socket/constants.c | 95 ++++++++++++++++++++++++--------------- ext/socket/mkconstants.rb | 3 +- ext/socket/rubysocket.h | 2 +- 4 files changed, 74 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index ae12222e64..7aacb160bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Mon Feb 9 23:21:29 2009 Tanaka Akira + + * ext/socket/constants.c (level_arg): use unknown_level_to_int for + non internet protocol. + (optname_arg): use only so_optname_to_int for non internet protocol. + (cmsg_type_arg): use only scm_optname_to_int for non internet + protocol. + + * ext/socket/mkconstants.rb: generate unknown_level_to_int. + rename iplevel_to_int to ip_level_to_int. + Mon Feb 9 23:04:27 2009 Tanaka Akira * ext/socket/mkconstants.rb: rename level_to_int to iplevel_to_int. diff --git a/ext/socket/constants.c b/ext/socket/constants.c index aaedfa1962..f0e210246d 100644 --- a/ext/socket/constants.c +++ b/ext/socket/constants.c @@ -61,27 +61,73 @@ int level_arg(int family, VALUE level) { /* convert SOL_SOCKET, IPPROTO_TCP, etc. */ - return constant_arg(level, iplevel_to_int, "unknown protocol level"); + if (IS_IP_FAMILY(family)) { + return constant_arg(level, ip_level_to_int, "unknown protocol level"); + } + else { + return constant_arg(level, unknown_level_to_int, "unknown protocol level"); + } } int optname_arg(int family, int level, VALUE optname) { - switch (level) { - case SOL_SOCKET: - return constant_arg(optname, so_optname_to_int, "unknown socket level option name"); - case IPPROTO_IP: - return constant_arg(optname, ip_optname_to_int, "unknown IP level option name"); + if (IS_IP_FAMILY(family)) { + switch (level) { + case SOL_SOCKET: + return constant_arg(optname, so_optname_to_int, "unknown socket level option name"); + case IPPROTO_IP: + return constant_arg(optname, ip_optname_to_int, "unknown IP level option name"); #ifdef IPPROTO_IPV6 - case IPPROTO_IPV6: - return constant_arg(optname, ipv6_optname_to_int, "unknown IPv6 level option name"); + case IPPROTO_IPV6: + return constant_arg(optname, ipv6_optname_to_int, "unknown IPv6 level option name"); #endif - case IPPROTO_TCP: - return constant_arg(optname, tcp_optname_to_int, "unknown TCP level option name"); - case IPPROTO_UDP: - return constant_arg(optname, udp_optname_to_int, "unknown UDP level option name"); - default: - return NUM2INT(optname); + case IPPROTO_TCP: + return constant_arg(optname, tcp_optname_to_int, "unknown TCP level option name"); + case IPPROTO_UDP: + return constant_arg(optname, udp_optname_to_int, "unknown UDP level option name"); + default: + return NUM2INT(optname); + } + } + else { + switch (level) { + case SOL_SOCKET: + return constant_arg(optname, so_optname_to_int, "unknown socket level option name"); + default: + return NUM2INT(optname); + } + } +} + +int +cmsg_type_arg(int family, int level, VALUE type) +{ + if (IS_IP_FAMILY(family)) { + switch (level) { + case SOL_SOCKET: + return constant_arg(type, scm_optname_to_int, "unknown UNIX control message"); + case IPPROTO_IP: + return constant_arg(type, ip_optname_to_int, "unknown IP control message"); +#ifdef INET6 + case IPPROTO_IPV6: + return constant_arg(type, ipv6_optname_to_int, "unknown IPv6 control message"); +#endif + case IPPROTO_TCP: + return constant_arg(type, tcp_optname_to_int, "unknown TCP control message"); + case IPPROTO_UDP: + return constant_arg(type, udp_optname_to_int, "unknown UDP control message"); + default: + return NUM2INT(type); + } + } + else { + switch (level) { + case SOL_SOCKET: + return constant_arg(type, scm_optname_to_int, "unknown UNIX control message"); + default: + return NUM2INT(type); + } } } @@ -92,27 +138,6 @@ shutdown_how_arg(VALUE how) return constant_arg(how, shutdown_how_to_int, "unknown shutdown argument"); } -int -cmsg_type_arg(int family, int level, VALUE type) -{ - switch (level) { - case SOL_SOCKET: - return constant_arg(type, scm_optname_to_int, "unknown UNIX control message"); - case IPPROTO_IP: - return constant_arg(type, ip_optname_to_int, "unknown IP control message"); -#ifdef INET6 - case IPPROTO_IPV6: - return constant_arg(type, ipv6_optname_to_int, "unknown IPv6 control message"); -#endif - case IPPROTO_TCP: - return constant_arg(type, tcp_optname_to_int, "unknown TCP control message"); - case IPPROTO_UDP: - return constant_arg(type, udp_optname_to_int, "unknown UDP control message"); - default: - return NUM2INT(type); - } -} - static void sock_define_const(const char *name, int value, VALUE mConst) { diff --git a/ext/socket/mkconstants.rb b/ext/socket/mkconstants.rb index 30cc90d47a..d3058f11f0 100644 --- a/ext/socket/mkconstants.rb +++ b/ext/socket/mkconstants.rb @@ -242,7 +242,8 @@ end def_name_to_int("family_to_int", /\A(AF_|PF_)/, "AF_") def_name_to_int("socktype_to_int", /\ASOCK_/, "SOCK_") def_name_to_int("ipproto_to_int", /\AIPPROTO_/, "IPPROTO_") -def_name_to_int("iplevel_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) +def_name_to_int("unknown_level_to_int", /\ASOL_SOCKET\z/, "SOL_") +def_name_to_int("ip_level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) def_name_to_int("so_optname_to_int", /\ASO_/, "SO_") def_name_to_int("ip_optname_to_int", /\AIP_/, "IP_") def_name_to_int("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h index efd91f662e..ae21f2608c 100644 --- a/ext/socket/rubysocket.h +++ b/ext/socket/rubysocket.h @@ -196,8 +196,8 @@ int family_arg(VALUE domain); int socktype_arg(VALUE type); int level_arg(int family, VALUE level); int optname_arg(int family, int level, VALUE optname); -int shutdown_how_arg(VALUE how); int cmsg_type_arg(int family, int level, VALUE type); +int shutdown_how_arg(VALUE how); int rb_sock_getfamily(int sockfd);