about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-11-05 00:49:06 -0800
committerEric Wong <normalperson@yhbt.net>2009-11-05 00:49:06 -0800
commitd3c20360f9607a9e04f7d28ce0a796437f733e5f (patch)
tree19783fd6009bef38ae57e8aa5b31360505ba25cd /lib
parentc59dad8b8cca7087860e64d161250ab09edb14e9 (diff)
downloadunicorn-d3c20360f9607a9e04f7d28ce0a796437f733e5f.tar.gz
Subclass off the core File class so we don't have to
worry about #size being defined.  This will mainly
be useful to Rainbows! but allows us to simplify
our TeeInput implementation a little, too.
Diffstat (limited to 'lib')
-rw-r--r--lib/unicorn/tee_input.rb10
-rw-r--r--lib/unicorn/util.rb14
2 files changed, 15 insertions, 9 deletions
diff --git a/lib/unicorn/tee_input.rb b/lib/unicorn/tee_input.rb
index b66dce0..474f10f 100644
--- a/lib/unicorn/tee_input.rb
+++ b/lib/unicorn/tee_input.rb
@@ -38,7 +38,7 @@ module Unicorn
         @tmp.seek(pos)
       end
 
-      @size = tmp_size
+      @size = @tmp.size
     end
 
     # call-seq:
@@ -73,7 +73,7 @@ module Unicorn
         rv
       else
         rv = args.shift || @buf2.dup
-        diff = tmp_size - @tmp.pos
+        diff = @tmp.size - @tmp.pos
         if 0 == diff
           ensure_length(tee(length, rv), length)
         else
@@ -87,7 +87,7 @@ module Unicorn
       socket or return @tmp.gets
       nil == $/ and return read
 
-      orig_size = tmp_size
+      orig_size = @tmp.size
       if @tmp.pos == orig_size
         tee(Const::CHUNK_SIZE, @buf2) or return nil
         @tmp.seek(orig_size)
@@ -147,10 +147,6 @@ module Unicorn
       self.socket = nil
     end
 
-    def tmp_size
-      StringIO === @tmp ? @tmp.size : @tmp.stat.size
-    end
-
     # tee()s into +buf+ until it is of +length+ bytes (or until
     # we've reached the Content-Length of the request body).
     # Returns +buf+ (the exact object, not a duplicate)
diff --git a/lib/unicorn/util.rb b/lib/unicorn/util.rb
index 4bbc590..6444699 100644
--- a/lib/unicorn/util.rb
+++ b/lib/unicorn/util.rb
@@ -4,6 +4,16 @@ require 'fcntl'
 require 'tmpdir'
 
 module Unicorn
+
+  class TmpIO < ::File
+
+    # for easier env["rack.input"] compatibility
+    def size
+      # flush if sync
+      stat.size
+    end
+  end
+
   class Util
     class << self
 
@@ -47,8 +57,8 @@ module Unicorn
       # buffering is disabled
       def tmpio
         fp = begin
-          File.open("#{Dir::tmpdir}/#{rand}",
-                    File::RDWR|File::CREAT|File::EXCL, 0600)
+          TmpIO.open("#{Dir::tmpdir}/#{rand}",
+                     File::RDWR|File::CREAT|File::EXCL, 0600)
         rescue Errno::EEXIST
           retry
         end