fread の戻り値について

Tremor の実験で発覚した fread の戻り値の問題。
Mona の fread はファイルが読めないときは -1 を返すが、手元の Linux の fread は 0 を返している。
こういうときは「man fread」

返り値
       fread()  と fwrite() は読み書きに成功した要素の個数を返す。エラーが生じた場合や、end-of-file(ファイルの最後)に達し
       た場合、返り値は指定した個数よりも小さい値(またはゼロ)となる。

       fread() は end-of-file とエラーを区別しないので、どちらが生じたかを判断するためには、呼び出し側で feof(3) と  fer‐
       ror(3) とを使用しなければならない。

準拠
       fread() 関数と fwrite() 関数は ANSI X3.159-1989 (‘‘ANSI C’’)に準拠する。

うーん。微妙だ。どちらともとれるな。
あ、戻り値が size_t なので非負でないとまずそう。
というわけで、以下のようにコードを変更しようと思うのですがどうでしょうか。
確認をお願いします。→ id:shotaro_tsuji

fread.c

--- mona/core/monalibc/stdio/fread.c.org        2007-08-29 00:30:08.000000000 +0900
+++ mona/core/monalibc/stdio/fread.c    2007-08-29 00:32:11.000000000 +0900
@@ -76,7 +76,7 @@
         if( readsize == -1 )
         {
             stream->_flags |= __SERR;
-            return (size_t)-1;
+            return 0;
         }
         if( readsize < size )
         {
@@ -130,7 +130,7 @@
             if( readsize == -1 )
             {
                 stream->_flags |= __SERR;
-                return (size_t)-1;
+                return 0;
             }
             if( readsize < size )
             {
@@ -184,7 +184,7 @@
     if( !(stream->_flags & __SRD) )
     {
         errno = EBADF;
-        return -1;
+        return 0;
     }
     if( stream->_extra->stds == __STDIN )
     {

fgetc

--- mona/core/monalibc/stdio/fgetc.c.org        2007-08-29 00:33:34.000000000 +0900
+++ mona/core/monalibc/stdio/fgetc.c    2007-08-29 00:33:51.000000000 +0900
@@ -11,7 +11,7 @@
        int result;
 
        result = fread(&c, 1, 1, fp);
-       if( result < 0 ) return EOF;
+       if(0 == result) return EOF;
        return (int)c;
 }

動いた

上2つの修正を入れると。Tremor の一部が動いた。