浏览代码

Ensure gets stops on newline or bufchar

Tom Almeida 6 年之前
父节点
当前提交
d7a0f3d526
共有 1 个文件被更改,包括 3 次插入0 次删除
  1. 3 0
      src/stdio/src/lib.rs

+ 3 - 0
src/stdio/src/lib.rs

@@ -351,6 +351,9 @@ 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 {
     if let Some((rpos, rend)) = stream.read {
         for _ in (0..(n-1) as usize).take_while(|x| rpos + x < rend) {
         for _ in (0..(n-1) as usize).take_while(|x| rpos + x < rend) {
             st[diff] = stream.buf[rpos + diff] as i8;
             st[diff] = stream.buf[rpos + diff] as i8;
+            if st[diff] == b'\n' as i8 || st[diff] == stream.buf_char {
+                break;
+            }
             diff += 1;
             diff += 1;
         }
         }
         stream.read = Some((rpos+diff, rend));
         stream.read = Some((rpos+diff, rend));