* random.c: replace with Mersenne Twister RNG.
* eval.c (jump_tag_but_local_jump): preserve retval in LocalJumpError exceptions. * parse.y (command): no more check for "super outside of method". * eval.c (rb_mod_define_method): should set last_class and last_func in the block->frame. * eval.c (error_handle): should handle TAG_THROW as well. * parse.y (yylex): new decimal notation '0d4567'. * parse.y (yylex): new octal notation '0o777'. * parse.y (string_content): every string_content node should return string only. use NODE_EVSTR to coercing. * eval.c (rb_eval): NODE_EVSTR support. * re.c (rb_reg_quote): avoid unnecessary string allocation. * string.c (get_pat): quote metachracters before compiling a string into a regex. * string.c (rb_str_split_m): special treatment of strings of size 1, but AWK emulation. now uses get_pat(). * string.c (rb_str_match_m): quote metacharacters. * string.c (rb_str_match2): ditto. * ext/socket/socket.c (sock_addrinfo): make all 3 versions of getaddrinfo happy. [ruby-core:00184] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7194b66fb2
commit
afb222575d
@ -548,6 +548,22 @@ mkinetaddr(host, buf, len)
|
|||||||
mkipaddr0((struct sockaddr*)&sin, buf, len);
|
mkipaddr0((struct sockaddr*)&sin, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
str_isnumber(p)
|
||||||
|
const char *p;
|
||||||
|
{
|
||||||
|
char *ep;
|
||||||
|
|
||||||
|
if (!p || *p == '\0')
|
||||||
|
return 0;
|
||||||
|
ep = NULL;
|
||||||
|
(void)strtoul(p, &ep, 10);
|
||||||
|
if (ep && *ep == '\0')
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct addrinfo*
|
static struct addrinfo*
|
||||||
sock_addrinfo(host, port, socktype, flags)
|
sock_addrinfo(host, port, socktype, flags)
|
||||||
VALUE host, port;
|
VALUE host, port;
|
||||||
@ -598,17 +614,16 @@ sock_addrinfo(host, port, socktype, flags)
|
|||||||
portp = RSTRING(port)->ptr;
|
portp = RSTRING(port)->ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (socktype == 0 && flags == 0) {
|
if (socktype == 0 && flags == 0 && str_isnumber(portp)) {
|
||||||
hintsp = 0;
|
socktype = SOCK_DGRAM;
|
||||||
}
|
|
||||||
else {
|
|
||||||
hintsp = &hints;
|
|
||||||
MEMZERO(&hints, struct addrinfo, 1);
|
|
||||||
hints.ai_family = PF_UNSPEC;
|
|
||||||
hints.ai_protocol = 0;
|
|
||||||
hints.ai_socktype = socktype;
|
|
||||||
hints.ai_flags = flags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hintsp = &hints;
|
||||||
|
MEMZERO(&hints, struct addrinfo, 1);
|
||||||
|
hints.ai_family = PF_UNSPEC;
|
||||||
|
hints.ai_protocol = 0;
|
||||||
|
hints.ai_socktype = socktype;
|
||||||
|
hints.ai_flags = flags;
|
||||||
error = getaddrinfo(hostp, portp, hintsp, &res);
|
error = getaddrinfo(hostp, portp, hintsp, &res);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (hostp && hostp[strlen(hostp)-1] == '\n') {
|
if (hostp && hostp[strlen(hostp)-1] == '\n') {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user