* ext/socket/socket.c (setup_domain_and_type): honor duck typing.
[ruby-dev:23522] * ext/socket/socket.c (sock_s_getnameinfo): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a655b0d8e1
commit
6eaba4acec
@ -7,6 +7,13 @@ Mon May 17 16:04:06 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
|||||||
(p 0.00000000000000000001 was '9.999999999999999e-21', now is
|
(p 0.00000000000000000001 was '9.999999999999999e-21', now is
|
||||||
'1.0e-20')
|
'1.0e-20')
|
||||||
|
|
||||||
|
Mon May 17 10:13:33 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/socket/socket.c (setup_domain_and_type): honor duck typing.
|
||||||
|
[ruby-dev:23522]
|
||||||
|
|
||||||
|
* ext/socket/socket.c (sock_s_getnameinfo): ditto.
|
||||||
|
|
||||||
Mon May 17 00:36:21 2004 why the lucky stiff <why@ruby-lang.org>
|
Mon May 17 00:36:21 2004 why the lucky stiff <why@ruby-lang.org>
|
||||||
|
|
||||||
* lib/yaml/baseemitter.rb (indent_text): was forcing a mod value
|
* lib/yaml/baseemitter.rb (indent_text): was forcing a mod value
|
||||||
|
@ -1777,10 +1777,13 @@ setup_domain_and_type(domain, dv, type, tv)
|
|||||||
VALUE domain, type;
|
VALUE domain, type;
|
||||||
int *dv, *tv;
|
int *dv, *tv;
|
||||||
{
|
{
|
||||||
|
VALUE tmp;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
if (TYPE(domain) == T_STRING) {
|
tmp = rb_check_string_type(domain);
|
||||||
SafeStringValue(domain);
|
if (!NIL_P(tmp)) {
|
||||||
|
domain = tmp;
|
||||||
|
rb_check_safe_obj(domain);
|
||||||
ptr = RSTRING(domain)->ptr;
|
ptr = RSTRING(domain)->ptr;
|
||||||
if (strcmp(ptr, "AF_INET") == 0)
|
if (strcmp(ptr, "AF_INET") == 0)
|
||||||
*dv = AF_INET;
|
*dv = AF_INET;
|
||||||
@ -1828,8 +1831,10 @@ setup_domain_and_type(domain, dv, type, tv)
|
|||||||
else {
|
else {
|
||||||
*dv = NUM2INT(domain);
|
*dv = NUM2INT(domain);
|
||||||
}
|
}
|
||||||
if (TYPE(type) == T_STRING) {
|
tmp = rb_check_string_type(type);
|
||||||
SafeStringValue(type);
|
if (!NIL_P(tmp)) {
|
||||||
|
type = tmp;
|
||||||
|
rb_check_safe_obj(type);
|
||||||
ptr = RSTRING(type)->ptr;
|
ptr = RSTRING(type)->ptr;
|
||||||
if (strcmp(ptr, "SOCK_STREAM") == 0)
|
if (strcmp(ptr, "SOCK_STREAM") == 0)
|
||||||
*tv = SOCK_STREAM;
|
*tv = SOCK_STREAM;
|
||||||
@ -2244,7 +2249,7 @@ sock_s_getnameinfo(argc, argv)
|
|||||||
int argc;
|
int argc;
|
||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
{
|
{
|
||||||
VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags;
|
VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags, tmp;
|
||||||
char *hptr, *pptr;
|
char *hptr, *pptr;
|
||||||
char hbuf[1024], pbuf[1024];
|
char hbuf[1024], pbuf[1024];
|
||||||
int fl;
|
int fl;
|
||||||
@ -2261,7 +2266,9 @@ sock_s_getnameinfo(argc, argv)
|
|||||||
if (!NIL_P(flags)) {
|
if (!NIL_P(flags)) {
|
||||||
fl = NUM2INT(flags);
|
fl = NUM2INT(flags);
|
||||||
}
|
}
|
||||||
if (TYPE(sa) == T_STRING) {
|
tmp = rb_check_string_type(sa);
|
||||||
|
if (!NIL_P(tmp)) {
|
||||||
|
sa = tmp;
|
||||||
if (sizeof(ss) < RSTRING(sa)->len) {
|
if (sizeof(ss) < RSTRING(sa)->len) {
|
||||||
rb_raise(rb_eTypeError, "sockaddr length too big");
|
rb_raise(rb_eTypeError, "sockaddr length too big");
|
||||||
}
|
}
|
||||||
@ -2270,8 +2277,11 @@ sock_s_getnameinfo(argc, argv)
|
|||||||
rb_raise(rb_eTypeError, "sockaddr size differs - should not happen");
|
rb_raise(rb_eTypeError, "sockaddr size differs - should not happen");
|
||||||
}
|
}
|
||||||
sap = (struct sockaddr*)&ss;
|
sap = (struct sockaddr*)&ss;
|
||||||
|
goto call_nameinfo;
|
||||||
}
|
}
|
||||||
else if (TYPE(sa) == T_ARRAY) {
|
tmp = rb_check_array_type(sa);
|
||||||
|
if (!NIL_P(tmp)) {
|
||||||
|
sa = tmp;
|
||||||
MEMZERO(&hints, struct addrinfo, 1);
|
MEMZERO(&hints, struct addrinfo, 1);
|
||||||
if (RARRAY(sa)->len == 3) {
|
if (RARRAY(sa)->len == 3) {
|
||||||
af = RARRAY(sa)->ptr[0];
|
af = RARRAY(sa)->ptr[0];
|
||||||
@ -2346,6 +2356,7 @@ sock_s_getnameinfo(argc, argv)
|
|||||||
rb_raise(rb_eTypeError, "expecting String or Array");
|
rb_raise(rb_eTypeError, "expecting String or Array");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
call_nameinfo:
|
||||||
error = getnameinfo(sap, SA_LEN(sap), hbuf, sizeof(hbuf),
|
error = getnameinfo(sap, SA_LEN(sap), hbuf, sizeof(hbuf),
|
||||||
pbuf, sizeof(pbuf), fl);
|
pbuf, sizeof(pbuf), fl);
|
||||||
if (error) goto error_exit_name;
|
if (error) goto error_exit_name;
|
||||||
|
2
parse.y
2
parse.y
@ -293,7 +293,7 @@ static void top_local_setup();
|
|||||||
%token tLBRACE_ARG /* { */
|
%token tLBRACE_ARG /* { */
|
||||||
%token tSTAR /* * */
|
%token tSTAR /* * */
|
||||||
%token tAMPER /* & */
|
%token tAMPER /* & */
|
||||||
%token tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG
|
%token tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORD_BEG tQWORDS_BEG
|
||||||
%token tSTRING_DBEG tSTRING_DVAR tSTRING_END
|
%token tSTRING_DBEG tSTRING_DVAR tSTRING_END
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user