summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-28 07:16:25 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-28 07:16:25 +0000
commite9b3ccfd5feaee8b41e801290ef6e7c8f4d6eb4f (patch)
treef52676b0db3b12e37e30e8e692a5e6de60fec7aa
parent9f7e5d1d9bf02881f9a7dbc0673d8f9e972f5368 (diff)
Merge from ruby_1_8.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@16664 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog16
-rw-r--r--error.c5
-rw-r--r--lib/singleton.rb62
-rw-r--r--lib/webrick/httpservlet/cgihandler.rb4
4 files changed, 54 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 82da5cca26..ad7bc7d644 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Wed May 28 16:12:44 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):
+ Set the HTTP status code to 302 if a Location header field is
+ present and the status code is not valid as a client
+ redirection. cf. RFC 3875 6.2.3, 6.2.4.
+
+Wed May 28 15:18:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/singleton.rb (SingletonClassMethods): _load should be public.
+
Wed May 28 12:52:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
@@ -5,6 +16,11 @@ Wed May 28 12:52:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* object.c (convert_type): ditto.
+Tue May 27 23:26:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_bug): description from rb_bug() should include
+ patchlevel. [ruby-dev:34826]
+
Tue May 27 20:19:22 2008 Akinori MUSHA <knu@iDaemons.org>
* array.c (rb_ary_slice_bang): Return an empty array instead of
diff --git a/error.c b/error.c
index 19164c10cf..a0530172f6 100644
--- a/error.c
+++ b/error.c
@@ -30,6 +30,7 @@
#endif
extern const char ruby_version[], ruby_release_date[], ruby_platform[];
+extern const int ruby_patchlevel;
int ruby_nerrs;
@@ -208,8 +209,8 @@ rb_bug(fmt, va_alist)
va_init_list(args, fmt);
vfprintf(out, fmt, args);
va_end(args);
- fprintf(out, "\nruby %s (%s) [%s]\n\n",
- ruby_version, ruby_release_date, ruby_platform);
+ fprintf(out, "\nruby %s (%s patchlevel %d) [%s]\n\n",
+ ruby_version, ruby_release_date, ruby_patchlevel, ruby_platform);
}
abort();
}
diff --git a/lib/singleton.rb b/lib/singleton.rb
index 0ab8517275..943f7ca57b 100644
--- a/lib/singleton.rb
+++ b/lib/singleton.rb
@@ -30,7 +30,7 @@
# * Klass.new and Klass.allocate - as private
#
# Providing (or modifying) the class methods
-# * Klass.inherited(sub_klass) and Klass.clone() -
+# * Klass.inherited(sub_klass) and Klass.clone() -
# to ensure that the Singleton pattern is properly
# inherited and cloned.
#
@@ -70,10 +70,10 @@ module Singleton
def dup
raise TypeError, "can't dup instance of singleton #{self.class}"
end
-
- private
+
+ private
# default marshalling strategy
- def _dump(depth=-1)
+ def _dump(depth=-1)
''
end
end
@@ -104,7 +104,7 @@ class << Singleton
end
end
elsif _instantiate?()
- Thread.critical = false
+ Thread.critical = false
else
@__instance__ = false
Thread.critical = false
@@ -123,26 +123,26 @@ class << Singleton
end
@__instance__
end
-
- module SingletonClassMethods
+
+ module SingletonClassMethods
# properly clone the Singleton pattern - did you know
- # that duping doesn't copy class methods?
+ # that duping doesn't copy class methods?
def clone
Singleton.__init__(super)
end
-
+
+ def _load(str)
+ instance
+ end
+
private
-
- # ensure that the Singleton pattern is properly inherited
+
+ # ensure that the Singleton pattern is properly inherited
def inherited(sub_klass)
super
Singleton.__init__(sub_klass)
end
-
- def _load(str)
- instance
- end
-
+
# waiting-loop hook
def _instantiate?()
while false.equal?(@__instance__)
@@ -153,7 +153,7 @@ class << Singleton
@__instance__
end
end
-
+
def __init__(klass)
klass.instance_eval { @__instance__ = nil }
class << klass
@@ -161,11 +161,11 @@ class << Singleton
end
klass
end
-
+
private
# extending an object with Singleton is a bad idea
undef_method :extend_object
-
+
def append_features(mod)
# help out people counting on transitive mixins
unless mod.instance_of?(Class)
@@ -173,7 +173,7 @@ class << Singleton
end
super
end
-
+
def included(klass)
super
klass.private_class_method :new, :allocate
@@ -181,21 +181,21 @@ class << Singleton
Singleton.__init__(klass)
end
end
-
+
if __FILE__ == $0
def num_of_instances(klass)
"#{ObjectSpace.each_object(klass){}} #{klass} instance(s)"
-end
+end
# The basic and most important example.
class SomeSingletonClass
include Singleton
end
-puts "There are #{num_of_instances(SomeSingletonClass)}"
+puts "There are #{num_of_instances(SomeSingletonClass)}"
a = SomeSingletonClass.instance
b = SomeSingletonClass.instance # a and b are same object
@@ -218,23 +218,23 @@ class Ups < SomeSingletonClass
puts "initialize called by thread ##{Thread.current[:i]}"
end
end
-
+
class << Ups
def _instantiate?
@enter.push Thread.current[:i]
while false.equal?(@__instance__)
Thread.critical = false
- sleep 0.08
+ sleep 0.08
Thread.critical = true
end
@leave.push Thread.current[:i]
@__instance__
end
-
+
def __sleep
sleep(rand(0.08))
end
-
+
def new
begin
__sleep
@@ -246,12 +246,12 @@ class << Ups
end
end
end
-
+
def instantiate_all
@enter = []
@leave = []
- 1.upto(9) {|i|
- Thread.new {
+ 1.upto(9) {|i|
+ Thread.new {
begin
Thread.current[:i] = i
__sleep
@@ -341,7 +341,7 @@ end
class Down < Middle; end
puts "and basic \"Down test\" is #{Down.instance == Down.instance}\n
-Various exceptions"
+Various exceptions"
begin
module AModule
diff --git a/lib/webrick/httpservlet/cgihandler.rb b/lib/webrick/httpservlet/cgihandler.rb
index a35b59edb8..d5895e5285 100644
--- a/lib/webrick/httpservlet/cgihandler.rb
+++ b/lib/webrick/httpservlet/cgihandler.rb
@@ -85,6 +85,10 @@ module WEBrick
res.status = $1.to_i
header.delete('status')
end
+ if header.has_key?('location')
+ # RFC 3875 6.2.3, 6.2.4
+ res.status = 302 unless (300...400) === res.status
+ end
if header.has_key?('set-cookie')
header['set-cookie'].each{|k|
res.cookies << Cookie.parse_set_cookie(k)