about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/io.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libcore/io.rs b/src/libcore/io.rs
index 460fd60d4c5..64b69a7928b 100644
--- a/src/libcore/io.rs
+++ b/src/libcore/io.rs
@@ -868,9 +868,19 @@ impl Reader for *libc::FILE {
                 assert!(buf_len >= len);
 
                 let count = libc::fread(buf_p as *mut c_void, 1u as size_t,
-                                        len as size_t, *self);
+                                        len as size_t, *self) as uint;
+                if count < len {
+                  match libc::ferror(*self) {
+                    0 => (),
+                    _ => {
+                      error!("error reading buffer");
+                      error!("%s", os::last_os_error());
+                      fail!();
+                    }
+                  }
+                }
 
-                count as uint
+                count
             }
         }
     }