1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2000-08-24 06:49:20 +00:00
parent 0460efb78b
commit 6f0e8d1875
5 changed files with 52 additions and 16 deletions

View file

@ -9,6 +9,14 @@ Sat Aug 19 01:34:02 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
* ext/sdbm/_sdbm.c (makroom): fill hole with 0 on Win32 too.
Fri Aug 18 11:06:19 2000 Shugo Maeda <shugo@ruby-lang.org>
* ext/socket/socket.c (s_accept): start GC on EMFILE/ENFILE.
Thu Aug 17 16:04:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (is_defined): should clear ruby_errinfo.
Wed Aug 16 15:30:58 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* stable version 1.4.6 released.

11
eval.c
View file

@ -1556,7 +1556,10 @@ is_defined(self, node, buf)
val = CLASS_OF(val);
}
POP_TAG();
if (state) return 0;
if (state) {
ruby_errinfo = Qnil;
return 0;
}
check_bound:
if (rb_method_boundp(val, node->nd_mid, nd_type(node)== NODE_CALL)) {
return arg_defined(self, node->nd_args, buf, "method");
@ -1626,7 +1629,10 @@ is_defined(self, node, buf)
val = rb_eval(self, node->nd_head);
}
POP_TAG();
if (state) return 0;
if (state) {
ruby_errinfo = Qnil;
return 0;
}
else {
switch (TYPE(val)) {
case T_CLASS:
@ -1664,6 +1670,7 @@ is_defined(self, node, buf)
if (!state) {
return "expression";
}
ruby_errinfo = Qnil;
break;
}
return 0;

View file

@ -1026,6 +1026,7 @@ s_accept(class, fd, sockaddr, len)
socklen_t *len;
{
int fd2;
int retry = 0;
rb_secure(3);
retry:
@ -1035,6 +1036,12 @@ s_accept(class, fd, sockaddr, len)
TRAP_END;
if (fd2 < 0) {
switch (errno) {
case EMFILE:
case ENFILE:
if (retry) break;
rb_gc();
retry = 1;
goto retry;
case EINTR:
rb_thread_schedule();
goto retry;

View file

@ -121,30 +121,40 @@ class CGI < SimpleDelegator
RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
# make rfc1123 date string
def rfc1123_date(time)
def CGI.rfc1123_date(time)
t = time.clone.gmtime
return format("%s, %.2d %s %d %.2d:%.2d:%.2d GMT",
RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
t.hour, t.min, t.sec)
end
def rfc1123_date(time)
CGI.rfc1123_date(time)
end
# escape url encode
def escape(str)
def CGI.escape(str)
str.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&.unpack("C")[0]) }
end
def escape(str)
CGI.escape(str)
end
# unescape url encoded
def unescape(str)
def CGI.unescape(str)
str.gsub(/\+/, ' ').gsub(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") }
end
def unescape(str)
CGI.unescape(str)
end
# escape HTML
def escapeHTML(str)
def CGI.escapeHTML(str)
str.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
end
module_function :escape, :unescape, :escapeHTML, :rfc1123_date
def escapeHTML(str)
CGI.escapeHTML(str)
end
# offline mode. read name=value pairs on standard input.
def read_from_cmdline
require "shellwords.rb"

View file

@ -4,20 +4,20 @@
module Observable
def add_observer(observer)
@observer_peers = [] unless @observer_peers
@observer_peers = [] unless defined? @observer_peers
unless defined? observer.update
raise NameError, "observer needs to respond to `update'"
end
@observer_peers.push observer
end
def delete_observer(observer)
@observer_peers.delete observer if @observer_peers
@observer_peers.delete observer if defined? @observer_peers
end
def delete_observers
@observer_peers.clear if @observer_peers
@observer_peers.clear if defined? @observer_peers
end
def count_observers
if @observer_peers
if defined? @observer_peers
@observer_peers.size
else
0
@ -27,11 +27,15 @@ module Observable
@observer_state = state
end
def changed?
@observer_state
if defined? @observer_state and @observer_state
true
else
false
end
end
def notify_observers(*arg)
if @observer_state
if @observer_peers
if defined? @observer_state and @observer_state
if defined? @observer_peers
for i in @observer_peers.dup
i.update(*arg)
end