Эх сурвалжийг харах

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

greatbridf 8 сар өмнө
parent
commit
1cc6683440

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

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