summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--hash.c5
-rw-r--r--intern.h1
-rw-r--r--lib/cgi/session/pstore.rb78
-rw-r--r--lib/matrix.rb53
-rw-r--r--process.c6
6 files changed, 98 insertions, 59 deletions
diff --git a/ChangeLog b/ChangeLog
index 60d5214..3a79802 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,17 @@
+Tue Jul 15 14:38:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/matrix.rb: remove elements conversion to_f, to_i, to_r.
+
+ * lib/cgi/session/pstore.rb: add new file.
+
Tue Jul 15 03:30:41 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
- * ext/syck/rubyext.c (syck_mark_emitter): forgot to rb_gc_mark the
- outgoing IO object.
+ * ext/syck/rubyext.c (syck_mark_emitter): forgot to rb_gc_mark the
+ outgoing IO object.
+
+Sun Jul 13 14:55:36 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * process.c (proc_getgroups, proc_setmaxgroups): fix typo.
Sat Jul 12 17:01:28 2003 NAKAMURA Usaku <usa@ruby-lang.org>
diff --git a/hash.c b/hash.c
index b87d9e2..bdb206f 100644
--- a/hash.c
+++ b/hash.c
@@ -1019,10 +1019,11 @@ env_delete(obj, name)
ruby_setenv(nam, 0);
#ifdef ENV_IGNORECASE
- if (strcasecmp(nam, PATH_ENV) == 0) {
+ if (strcasecmp(nam, PATH_ENV) == 0)
#else
- if (strcmp(nam, PATH_ENV) == 0) {
+ if (strcmp(nam, PATH_ENV) == 0)
#endif
+ {
path_tainted = 0;
}
return value;
diff --git a/intern.h b/intern.h
index 732c38d..f7dcc7c 100644
--- a/intern.h
+++ b/intern.h
@@ -289,6 +289,7 @@ VALUE rb_obj_is_kind_of _((VALUE, VALUE));
VALUE rb_obj_alloc _((VALUE));
VALUE rb_obj_clone _((VALUE));
VALUE rb_obj_dup _((VALUE));
+VALUE rb_obj_init_copy _((VALUE,VALUE));
VALUE rb_obj_taint _((VALUE));
VALUE rb_obj_tainted _((VALUE));
VALUE rb_obj_untaint _((VALUE));
diff --git a/lib/cgi/session/pstore.rb b/lib/cgi/session/pstore.rb
new file mode 100644
index 0000000..d681d99
--- /dev/null
+++ b/lib/cgi/session/pstore.rb
@@ -0,0 +1,78 @@
+require 'cgi/session'
+require 'pstore'
+
+class CGI
+ class Session
+ def []=(key, val)
+ unless @write_lock
+ @write_lock = true
+ end
+ unless @data
+ @data = @dbman.restore
+ end
+ #@data[key] = String(val)
+ @data[key] = val
+ end
+
+ class PStore
+ def check_id(id)
+ /[^0-9a-zA-Z]/ =~ id.to_s ? false : true
+ end
+
+ def initialize session, option={}
+ dir = option['tmpdir'] || ENV['TMP'] || '/tmp'
+ prefix = option['prefix'] || ''
+ id = session.session_id
+ unless check_id(id)
+ raise ArgumentError, "session_id `%s' is invalid" % id
+ end
+ path = dir+"/"+prefix+id
+ path.untaint
+ unless File::exist? path
+ @hash = {}
+ end
+ @p = ::PStore.new path
+ end
+
+ def restore
+ unless @hash
+ @p.transaction do
+ begin
+ @hash = @p['hash']
+ rescue
+ @hash = {}
+ end
+ end
+ end
+ @hash
+ end
+
+ def update
+ @p.transaction do
+ @p['hash'] = @hash
+ end
+ end
+
+ def close
+ update
+ end
+
+ def delete
+ path = @p.path
+ File::unlink path
+ end
+
+ end
+ end
+end
+
+if $0 == __FILE__
+ STDIN.reopen("/dev/null")
+ cgi = CGI.new
+ session = CGI::Session.new cgi, 'database_manager' => CGI::Session::PStore
+ session['key'] = {'k' => 'v'}
+ puts session['key'].class
+ fail unless Hash === session['key']
+ puts session['key'].inspect
+ fail unless session['key'].inspect == '{"k"=>"v"}'
+end
diff --git a/lib/matrix.rb b/lib/matrix.rb
index fcb16d6..8e56fcb 100644
--- a/lib/matrix.rb
+++ b/lib/matrix.rb
@@ -126,13 +126,7 @@
# column_vectors
# array of column vectors
# to_a
-# converts each element to Array
-# to_f
-# converts each element to Float
-# to_i
-# converts each element to Integer
-# to_r
-# converts each element to Rational
+# converts to Array of Arrays
# PRINTING:
# to_s
# returns string representation
@@ -163,9 +157,6 @@
# CONVERTING:
# covector
# to_a
-# to_f
-# to_i
-# to_r
# coerce(other)
# PRINTING:
# to_s
@@ -936,27 +927,6 @@ class Matrix
@rows.collect{|row| row.collect{|e| e}}
end
- #
- # Applies #to_f to all elements to return a new matrix.
- #
- def to_f
- collect{|e| e.to_f}
- end
-
- #
- # Applies #to_i to all elements to return a new matrix.
- #
- def to_i
- collect{|e| e.to_i}
- end
-
- #
- # Applies #to_r to all elements to return a new matrix.
- #
- def to_r
- collect{|e| e.to_r}
- end
-
#--
# PRINTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#++
@@ -1315,27 +1285,6 @@ class Vector
end
#
- # Applies #to_f to each element to produce a new vector.
- #
- def to_f
- collect{|e| e.to_f}
- end
-
- #
- # Applies #to_i to each element to produce a new vector.
- #
- def to_i
- collect{|e| e.to_i}
- end
-
- #
- # Applies #to_f to each element to produce a new vector.
- #
- def to_r
- collect{|e| e.to_r}
- end
-
- #
# FIXME: describe Vector#coerce.
#
def coerce(other)
diff --git a/process.c b/process.c
index 6c06c2b..141c187 100644
--- a/process.c
+++ b/process.c
@@ -1231,13 +1231,13 @@ proc_getgroups(VALUE obj)
{
#ifdef HAVE_GETGROUPS
VALUE ary;
- size_t ngroups = 32;
+ size_t ngroups;
gid_t *groups;
int i;
groups = ALLOCA_N(gid_t, maxgroups);
- ngroups = getgroups(ngroups, groups);
+ ngroups = getgroups(maxgroups, groups);
if (ngroups == -1)
rb_sys_fail(0);
@@ -1312,7 +1312,7 @@ static VALUE
proc_setmaxgroups(obj, val)
VALUE obj;
{
- size_t ngroups = INT2FIX(val);
+ size_t ngroups = FIX2INT(val);
if (ngroups > 4096)
ngroups = 4096;