* 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:
matz 2002-07-26 06:17:44 +00:00
parent 7194b66fb2
commit afb222575d

View File

@ -548,6 +548,22 @@ mkinetaddr(host, 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*
sock_addrinfo(host, port, socktype, flags)
VALUE host, port;
@ -598,17 +614,16 @@ sock_addrinfo(host, port, socktype, flags)
portp = RSTRING(port)->ptr;
}
if (socktype == 0 && flags == 0) {
hintsp = 0;
}
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;
if (socktype == 0 && flags == 0 && str_isnumber(portp)) {
socktype = SOCK_DGRAM;
}
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);
if (error) {
if (hostp && hostp[strlen(hostp)-1] == '\n') {