From: Yusuke ENDOH Date: 2005-09-28T17:28:35+09:00 Subject: [ruby-dev:27349] Re: File#read にゴミがつく 遠藤です。 山本さんのパッチ [ruby-dev:27339] と なかださんの方法 [ruby-dev:27341] のどちらでも 問題が解決する事を確認しました。 ありがとうございました。 # マクロ READ_DATA_PENDING の意味には # どういうコンセンサスがあるんですかね。 田中さんに紹介して頂いた http://rubyforge.org/tracker/download.php/426/1700/1074/108/patch のパッチだと確かに 32bit Solaris でコンパイルできなくなりました。 32bit Solaris ではもともと READ_DATA_PENDING は FILE_COUNT になっていたらしいことを踏まえて、 io.c 中の #elif の順番を以下のように変えると 32bit Solaris でも 64bit Solaris でも動作しました。 (ただし全ての Solaris 環境で効果があるか、 DragonFlyBSD など他環境にどういう影響を与えるかはわかりません) --- ruby-1.8.3.old/io.c Tue Sep 27 23:09:50 2005 +++ ruby-1.8.3.new/io.c Wed Sep 28 16:37:25 2005 @@ -141,6 +141,9 @@ #elif defined(FILE_COUNT) # define READ_DATA_PENDING(fp) ((fp)->FILE_COUNT > 0) # define READ_DATA_PENDING_COUNT(fp) ((fp)->FILE_COUNT) +#elif defined(HAVE___FPENDING) +# define READ_DATA_PENDING(fp) (__fpending(fp) > 0) +# define READ_DATA_PENDING_COUNT(fp) (__fpending(fp)) #elif defined(FILE_READEND) # define READ_DATA_PENDING(fp) ((fp)->FILE_READPTR < (fp)->FILE_READEND) # define READ_DATA_PENDING_COUNT(fp) ((fp)->FILE_READEND - (fp)->FILE_READPTR) -- Yusuke ENDOH