みやむこです。

> nとrの値からすると一回目でエラーになってるようですが、whileの前
> にもclearerr(f)を入れてもダメでしょうか。ダメだろうなぁ…。
だめでした。

> HP-UXでは条件を ferror(f) && errno とでもしなけりゃいけないのか
> も。

fwrite(3S) ではなく write(2) を直接使うとうまく行きました。
でも、ここだけ write(2) なのは気持ち悪いですね。


--- io.c.orig   2004-01-07 01:50:44.000000000 +0900
+++ io.c        2004-01-07 22:04:00.000000000 +0900
@@ -394,14 +394,17 @@
        }
     } while (--n > 0);
 #else
-    while (ptr += (r = fwrite(ptr, 1, n, f)), (n -= r) > 0) {
-       if (ferror(f)) {
+    while (n > 0) {
+       r = write(fileno(f), ptr, n);
+       if (r < 0) {
            if (rb_io_wait_writable(fileno(f))) {
                clearerr(f);
                continue;
            }
            return -1L;
        }
+       n -= r;
+       ptr += r;
     }
 #endif
     return len - n;


--
みやむこ