diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs
index d0b38f9405832fc6d96744d76375a7e6a3f3e7ae..0ce1eb1c96b2e56c74f77ca4a7e62570b9cc052e 100644
--- a/src/stdio/src/lib.rs
+++ b/src/stdio/src/lib.rs
@@ -351,10 +351,10 @@ pub extern "C" fn fgets(s: *mut c_char, n: c_int, stream: &mut FILE) -> *mut c_c
     if let Some((rpos, rend)) = stream.read {
         for _ in (0..(n-1) as usize).take_while(|x| rpos + x < rend) {
             st[diff] = stream.buf[rpos + diff] as i8;
-            if st[diff] == b'\n' as i8 || st[diff] == stream.buf_char {
+            diff += 1;
+            if st[diff-1] == b'\n' as i8 || st[diff-1] == stream.buf_char {
                 break;
             }
-            diff += 1;
         }
         stream.read = Some((rpos+diff, rend));
         for i in diff..(n-1) as usize {