瀏覽代碼

fix(sendfile): `sendfile` returns wrong written byte count

greatbridf 8 月之前
父節點
當前提交
1cc6683440
共有 1 個文件被更改,包括 6 次插入3 次删除
  1. 6 3
      src/kernel/vfs/file.rs

+ 6 - 3
src/kernel/vfs/file.rs

@@ -507,6 +507,7 @@ impl File {
             _ => return Err(EINVAL),
         }
 
+        let mut nsent = 0;
         for (cur, len) in Chunks::new(0, count, buffer.len()) {
             if Thread::current().signal_list.has_pending_signal() {
                 return if cur == 0 { Err(EINTR) } else { Ok(cur) };
@@ -517,12 +518,14 @@ impl File {
             }
 
             let nwrote = dest_file.write(&buffer[..nread]).await?;
-            if nwrote != nread {
-                return Ok(cur + nwrote);
+            nsent += nwrote;
+
+            if nwrote != len {
+                break;
             }
         }
 
-        Ok(count)
+        Ok(nsent)
     }
 
     pub fn ioctl(&self, request: usize, arg3: usize) -> KResult<usize> {