Skip to content

Commit 1802011

Browse files
committed
Add tests for std::fs::File::{read,write}_offset
1 parent 0c44405 commit 1802011

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

src/libstd/fs.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,6 +1917,53 @@ mod tests {
19171917
check!(fs::remove_file(filename));
19181918
}
19191919

1920+
#[test]
1921+
fn file_test_io_read_write_offset() {
1922+
let tmpdir = tmpdir();
1923+
let filename = tmpdir.join("file_rt_io_file_test_read_write_offset.txt");
1924+
let mut buf = [0; 256];
1925+
let write1 = "asdf";
1926+
let write2 = "qwer-";
1927+
let write3 = "-zxcv";
1928+
let content = "qwer-asdf-zxcv";
1929+
{
1930+
let oo = OpenOptions::new().create_new(true).write(true).read(true).clone();
1931+
let mut rw = check!(oo.open(&filename));
1932+
assert_eq!(check!(rw.write_offset(write1.as_bytes(), 5)), write1.len());
1933+
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 0);
1934+
assert_eq!(check!(rw.read_offset(&mut buf, 5)), write1.len());
1935+
assert_eq!(str::from_utf8(&buf[..write1.len()]), Ok(write1));
1936+
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 0);
1937+
assert_eq!(check!(rw.write(write2.as_bytes())), write2.len());
1938+
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 5);
1939+
assert_eq!(check!(rw.read(&mut buf)), write1.len());
1940+
assert_eq!(str::from_utf8(&buf[..write1.len()]), Ok(write1));
1941+
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
1942+
assert_eq!(check!(rw.read_offset(&mut buf[..write2.len()], 0)), write2.len());
1943+
assert_eq!(str::from_utf8(&buf[..write2.len()]), Ok(write2));
1944+
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
1945+
assert_eq!(check!(rw.write_offset(write3.as_bytes(), 9)), write3.len());
1946+
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
1947+
}
1948+
{
1949+
let mut read = check!(File::open(&filename));
1950+
assert_eq!(check!(read.read_offset(&mut buf, 0)), content.len());
1951+
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
1952+
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 0);
1953+
assert_eq!(check!(read.seek(SeekFrom::End(-5))), 9);
1954+
assert_eq!(check!(read.read_offset(&mut buf, 0)), content.len());
1955+
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
1956+
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 9);
1957+
assert_eq!(check!(read.read(&mut buf)), write3.len());
1958+
assert_eq!(str::from_utf8(&buf[..write3.len()]), Ok(write3));
1959+
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
1960+
assert_eq!(check!(read.read_offset(&mut buf, 0)), content.len());
1961+
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
1962+
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
1963+
}
1964+
check!(fs::remove_file(&filename));
1965+
}
1966+
19201967
#[test]
19211968
fn file_test_stat_is_correct_on_is_file() {
19221969
let tmpdir = tmpdir();

src/libstd/sys/unix/fd.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ impl FileDesc {
7474
pub fn write_offset(&self, buf: &[u8], offset: u64) -> io::Result<usize> {
7575
let ret = cvt(unsafe {
7676
libc::pwrite(self.fd,
77-
buf.as_ptr() as *const c_void,
78-
buf.len(),
79-
offset as off_t)
77+
buf.as_ptr() as *const c_void,
78+
buf.len(),
79+
offset as off_t)
8080
})?;
8181
Ok(ret as usize)
8282
}

0 commit comments

Comments
 (0)