[Hiki-dev:00716] Re: キャッシャの読み込み (Re: HTMLの文法)

Back to archive index

Kazuhiko kazuh****@fdiar*****
2005年 4月 25日 (月) 12:22:01 JST


At Mon, 25 Apr 2005 11:50:54 +0900,
Yazawa wrote:

> 追試したところ"marshal data too short"というエラーが出ていました。
> やはり、Windows固有の問題でバイナリモードでopenしないと0x1a以降を読んで
> くれないみたいです。

なるほど。File.read ではバイナリモードを指定できなさそうなので、以下のパッ
チの「いずれか」で問題が解決するか確認してくださいますか?

もし 1. で解決するなら、1. で行くほうが今後同様の問題ではまらなくてすみそ
うですが、どうでしょうか?

○ 1. $stdin を binmode にする

--- hiki.cgi.orig	2005-04-22 10:22:30.000000000 +0900
+++ hiki.cgi	2005-04-25 12:12:15.822174316 +0900
@@ -2,7 +2,7 @@
 # $Id: hiki.cgi,v 1.25 2005/04/22 01:22:30 fdiary Exp $
 # Copyright (C) 2002-2004 TAKEUCHI Hitoshi <hitos****@namar*****>
 
-BEGIN { $defout.binmode }
+BEGIN { $stdout.binmode; $stdin.binmode }
 
 $SAFE     = 1
 $KCODE    = 'e'

○ 2. File.read の替りに File.open(filename, 'rb'){|f| f.read} にする

--- hiki/storage.rb.orig	2005-01-31 22:08:37.866359000 +0900
+++ hiki/storage.rb	2005-04-25 12:07:15.331245135 +0900
@@ -93,7 +93,7 @@
       cache_path = "#{@conf.cache_path}/parser"
       Dir.mkdir( cache_path ) unless test( ?e, cache_path )
       begin
-	return Marshal::load( File.read( "#{cache_path}/#{CGI::escape( page )}" ) )
+	return Marshal::load( File.open( "#{cache_path}/#{CGI::escape( page )}", 'rb' ) {|f| f.read} )
       rescue
 	return nil
       end
-- 
かずひこ <http://wiki.fdiary.net/kazuhiko/>
  「恋とハックはアジャイルが命!」



Hiki-dev メーリングリストの案内
Back to archive index