about summary refs log tree commit homepage
path: root/lib/mogilefs
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-02-07 17:22:19 -0800
committerEric Wong <normalperson@yhbt.net>2009-02-07 17:22:19 -0800
commitcdc5fc07a34bd17f2162dcb171928f49af55ead7 (patch)
tree1447af491b2e28f21a631c202cf6507c6a5df64d /lib/mogilefs
parentffc4ec4baaae5020c98dc545c6c6ade0336a3311 (diff)
downloadmogilefs-client-cdc5fc07a34bd17f2162dcb171928f49af55ead7.tar.gz
File and StringIO objects need to be opened in binary mode,
otherwise they take the default encoding format.  Thankfully,
Sockets and Tempfile objects seem to be binary by default as of
1.9.1; but it really is a mess to have to deal with FS
abstractions that try to deal with encoding crap behind your
back...
Diffstat (limited to 'lib/mogilefs')
-rw-r--r--lib/mogilefs/httpfile.rb3
-rw-r--r--lib/mogilefs/mogilefs.rb2
2 files changed, 3 insertions, 2 deletions
diff --git a/lib/mogilefs/httpfile.rb b/lib/mogilefs/httpfile.rb
index 57af71b..593a494 100644
--- a/lib/mogilefs/httpfile.rb
+++ b/lib/mogilefs/httpfile.rb
@@ -50,6 +50,7 @@ class MogileFS::HTTPFile < StringIO
 
   def self.open(*args)
     fp = new(*args)
+    fp.set_encoding(Encoding::BINARY) if fp.respond_to?(:set_encoding)
 
     return fp unless block_given?
 
@@ -89,7 +90,7 @@ class MogileFS::HTTPFile < StringIO
 
     if @big_io
       # Don't try to run out of memory
-      File.open(@big_io) do |fp|
+      File.open(@big_io, "rb") do |fp|
         file_size = fp.stat.size
         fp.sync = true
         syswrite_full(sock, "PUT #{uri.request_uri} HTTP/1.0\r\n" \
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index e2ee1ee..f95cb1c 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -148,7 +148,7 @@ class MogileFS::MogileFS < MogileFS::Client
           mfp.big_io = file
           return
         else
-          return File.open(file) { |fp| sysrwloop(fp, mfp) }
+          return File.open(file, "rb") { |fp| sysrwloop(fp, mfp) }
         end
       end
     end