ruby-changes:9849
From: akr <ko1@a...>
Date: Thu, 8 Jan 2009 23:21:21 +0900 (JST)
Subject: [ruby-changes:9849] Ruby:r21390 (trunk): * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
akr 2009-01-08 23:20:47 +0900 (Thu, 08 Jan 2009) New Revision: 21390 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21390 Log: * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how. (shutdown_how_arg): new function. * ext/socket/mkconstants.rb: generate shutdown_how_to_int. Modified files: trunk/ChangeLog trunk/NEWS trunk/ext/socket/mkconstants.rb trunk/ext/socket/socket.c Index: ChangeLog =================================================================== --- ChangeLog (revision 21389) +++ ChangeLog (revision 21390) @@ -1,3 +1,10 @@ +Thu Jan 8 23:19:38 2009 Tanaka Akira <akr@f...> + + * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how. + (shutdown_how_arg): new function. + + * ext/socket/mkconstants.rb: generate shutdown_how_to_int. + Thu Jan 8 22:59:30 2009 Tanaka Akira <akr@f...> * ext/socket/mkconstants.rb (gen_name_to_int_func): generate Index: ext/socket/mkconstants.rb =================================================================== --- ext/socket/mkconstants.rb (revision 21389) +++ ext/socket/mkconstants.rb (revision 21390) @@ -219,6 +219,7 @@ <%= gen_name_to_int_func("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") %> <%= gen_name_to_int_func("tcp_optname_to_int", /\ATCP_/, "TCP_") %> <%= gen_name_to_int_func("udp_optname_to_int", /\AUDP_/, "UDP_") %> +<%= gen_name_to_int_func("shutdown_how_to_int", /\ASHUT_/, "SHUT_") %> <%= INTERN_DEFS.map {|decl, gen_hash, func| func }.join("\n") %> Index: ext/socket/socket.c =================================================================== --- ext/socket/socket.c (revision 21389) +++ ext/socket/socket.c (revision 21390) @@ -375,6 +375,13 @@ } } +static int +shutdown_how_arg(VALUE how) +{ + /* convert SHUT_RD, SHUT_WR, SHUT_RDWR. */ + return constant_arg(how, shutdown_how_to_int, "unknown shutdown argument"); +} + static VALUE init_sock(VALUE sock, int fd) { @@ -415,11 +422,11 @@ } rb_scan_args(argc, argv, "01", &howto); if (howto == Qnil) - how = 2; + how = SHUT_RDWR; else { - how = NUM2INT(howto); - if (how < 0 || 2 < how) { - rb_raise(rb_eArgError, "`how' should be either 0, 1, 2"); + how = shutdown_how_arg(howto); + if (how != SHUT_WR && how != SHUT_RD && how != SHUT_RDWR) { + rb_raise(rb_eArgError, "`how' should be either :SHUT_RD, :SHUT_WR, :SHUT_RDWR"); } } GetOpenFile(sock, fptr); Index: NEWS =================================================================== --- NEWS (revision 21389) +++ NEWS (revision 21390) @@ -78,8 +78,9 @@ returns a sender address as AddrInfo object instead of a string. * BasicSocket#local_address * BasicSocket#remote_address - * string/symbol as protocol/address family, socket type, protocol level and - socket option name can be specified as a string/symbol. + * string/symbol as protocol/address family, socket type, protocol level, + socket option name and shutdown's how argument can be specified as a + string/symbol. === Compatibility issues (excluding feature bug fixes) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/