We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
File::size_snapshot
1 parent 430681f commit c54fa28Copy full SHA for c54fa28
src/libstd/fs.rs
@@ -452,11 +452,15 @@ impl Read for File {
452
fn size_snapshot(&self) -> Option<usize> {
453
if let Ok(meta) = self.metadata() {
454
let len = meta.len();
455
- let size = len as usize;
456
- // Don't trust a length of zero. For example, "pseudofiles" on Linux
457
- // like /proc/meminfo report a size of 0.
458
- if size != 0 && size as u64 == len {
459
- return Some(size);
+ if let Ok(position) = self.inner.seek(SeekFrom::Current(0)) {
+ if let Some(distance) = len.checked_sub(position) {
+ let size = distance as usize;
+ // Don't trust a length of zero. For example, "pseudofiles"
+ // on Linux like /proc/meminfo report a size of 0.
460
+ if size != 0 && size as u64 == distance {
461
+ return Some(size);
462
+ }
463
464
}
465
466
None
0 commit comments