diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-05-20 04:28:36 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-05-20 04:28:36 +0000 |
| commit | 8258a00d5cce9506d5e22bf0c1f666729e3735db (patch) | |
| tree | 8fce4fed2cf5e215af7ee8ca39ca575246186d00 /lib/cgi | |
| parent | cd9b9dbb806cf08f66b35b0bba514446c0d6ea7a (diff) | |
| download | ruby-8258a00d5cce9506d5e22bf0c1f666729e3735db.tar.gz ruby-8258a00d5cce9506d5e22bf0c1f666729e3735db.tar.xz ruby-8258a00d5cce9506d5e22bf0c1f666729e3735db.zip | |
* numeric.c (flo_eq): alway check if operands are NaN.
[ruby-list:39685]
* lib/cgi/session.rb: use LOCK_SH to read, and a few other
improvements. [ruby-core:02328]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6371 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/cgi')
| -rw-r--r-- | lib/cgi/session.rb | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/lib/cgi/session.rb b/lib/cgi/session.rb index 10266b56f..845350139 100644 --- a/lib/cgi/session.rb +++ b/lib/cgi/session.rb @@ -364,16 +364,11 @@ class CGI unless check_id(id) raise ArgumentError, "session_id `%s' is invalid" % id end - path = dir+"/"+prefix+id - path.untaint - unless File::exist? path + @path = dir+"/"+prefix+id + @path.untaint + unless File::exist? @path @hash = {} end - begin - @f = open(path, "r+") - rescue Errno::ENOENT - @f = open(path, "w+") - end end # Restore session state from the session's FileStore file. @@ -382,13 +377,17 @@ class CGI def restore unless @hash @hash = {} - @f.flock File::LOCK_EX - @f.rewind - for line in @f - line.chomp! - k, v = line.split('=',2) - @hash[CGI::unescape(k)] = CGI::unescape(v) - end + begin + f = File.open(@path, 'r') + f.flock File::LOCK_SH + for line in f + line.chomp! + k, v = line.split('=',2) + @hash[CGI::unescape(k)] = CGI::unescape(v) + end + ensure + f.close unless f.nil? + end end @hash end @@ -396,25 +395,25 @@ class CGI # Save session state to the session's FileStore file. def update return unless @hash - @f.rewind - for k,v in @hash - @f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v)) - end - @f.truncate @f.tell + begin + f = File.open(@path, 'w') + f.flock File::LOCK_EX + for k,v in @hash + f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v)) + end + ensure + f.close unless f.nil? + end end # Update and close the session's FileStore file. def close - return if @f.closed? update - @f.close end # Close and delete the session's FileStore file. def delete - path = @f.path - @f.close - File::unlink path + File::unlink @path end end |
