diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-08-06 15:01:20 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-06 15:01:20 +0300 |
| commit | 68f7b265042c5dc023f24aaf65db60d030c8dbc2 (patch) | |
| tree | 2c76880f49ac6ee7ede90148c0aa631daa95f515 /src/libstd/sys | |
| parent | 8e04264b2387c66e10d150e50fca4cb9cba19046 (diff) | |
| parent | 291b6f16bb03c92fb383dfa12b8849808bace801 (diff) | |
| download | rust-68f7b265042c5dc023f24aaf65db60d030c8dbc2.tar.gz rust-68f7b265042c5dc023f24aaf65db60d030c8dbc2.zip | |
Rollup merge of #34916 - tbu-:pr_comment_on_seek_cast, r=GuillaumeGomez
Comment on the casts in the `seek` implementations on files
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/unix/fs.rs | 10 | ||||
| -rw-r--r-- | src/libstd/sys/windows/fs.rs | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index b315e676263..3b132744f70 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -27,7 +27,7 @@ use sys_common::{AsInner, FromInner}; #[cfg(any(target_os = "linux", target_os = "emscripten"))] use libc::{stat64, fstat64, lstat64, off64_t, ftruncate64, lseek64, dirent64, readdir64_r, open64}; #[cfg(target_os = "android")] -use libc::{stat as stat64, fstat as fstat64, lstat as lstat64, off64_t, lseek64, +use libc::{stat as stat64, fstat as fstat64, lstat as lstat64, lseek64, dirent as dirent64, open as open64}; #[cfg(not(any(target_os = "linux", target_os = "emscripten", @@ -485,9 +485,11 @@ impl File { pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> { let (whence, pos) = match pos { - SeekFrom::Start(off) => (libc::SEEK_SET, off as off64_t), - SeekFrom::End(off) => (libc::SEEK_END, off as off64_t), - SeekFrom::Current(off) => (libc::SEEK_CUR, off as off64_t), + // Casting to `i64` is fine, too large values will end up as + // negative which will cause an error in `lseek64`. + SeekFrom::Start(off) => (libc::SEEK_SET, off as i64), + SeekFrom::End(off) => (libc::SEEK_END, off), + SeekFrom::Current(off) => (libc::SEEK_CUR, off), }; let n = cvt(unsafe { lseek64(self.0.raw(), pos, whence) })?; Ok(n as u64) diff --git a/src/libstd/sys/windows/fs.rs b/src/libstd/sys/windows/fs.rs index 2683e57256d..4e6cef9a28d 100644 --- a/src/libstd/sys/windows/fs.rs +++ b/src/libstd/sys/windows/fs.rs @@ -324,6 +324,8 @@ impl File { pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> { let (whence, pos) = match pos { + // Casting to `i64` is fine, `SetFilePointerEx` reinterprets this + // integer as `u64`. SeekFrom::Start(n) => (c::FILE_BEGIN, n as i64), SeekFrom::End(n) => (c::FILE_END, n), SeekFrom::Current(n) => (c::FILE_CURRENT, n), |
