Skip to content

Commit af6840b

Browse files
committed
std: use stream_position where applicable
by replacing `seek(SeekFrom::Current(0))` calls
1 parent 6cc4843 commit af6840b

File tree

3 files changed

+31
-29
lines changed

3 files changed

+31
-29
lines changed

library/std/src/fs.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ impl OpenOptions {
984984
/// If a file is opened with both read and append access, beware that after
985985
/// opening, and after every write, the position for reading may be set at the
986986
/// end of the file. So, before writing, save the current position (using
987-
/// <code>[seek]\([SeekFrom]::[Current]\(0))</code>), and restore it before the next read.
987+
/// <code>[Seek]::[stream_position]</code>), and restore it before the next read.
988988
///
989989
/// ## Note
990990
///
@@ -993,8 +993,7 @@ impl OpenOptions {
993993
///
994994
/// [`write()`]: Write::write "io::Write::write"
995995
/// [`flush()`]: Write::flush "io::Write::flush"
996-
/// [seek]: Seek::seek "io::Seek::seek"
997-
/// [Current]: SeekFrom::Current "io::SeekFrom::Current"
996+
/// [stream_position]: Seek::stream_position "io::Seek::stream_position"
998997
///
999998
/// # Examples
1000999
///

library/std/src/fs/tests.rs

+24-24
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,9 @@ fn file_test_io_seek_and_tell_smoke_test() {
189189
{
190190
let mut read_stream = check!(File::open(filename));
191191
check!(read_stream.seek(SeekFrom::Start(set_cursor)));
192-
tell_pos_pre_read = check!(read_stream.seek(SeekFrom::Current(0)));
192+
tell_pos_pre_read = check!(read_stream.stream_position());
193193
check!(read_stream.read(&mut read_mem));
194-
tell_pos_post_read = check!(read_stream.seek(SeekFrom::Current(0)));
194+
tell_pos_post_read = check!(read_stream.stream_position());
195195
}
196196
check!(fs::remove_file(filename));
197197
let read_str = str::from_utf8(&read_mem).unwrap();
@@ -286,42 +286,42 @@ fn file_test_io_read_write_at() {
286286
let oo = OpenOptions::new().create_new(true).write(true).read(true).clone();
287287
let mut rw = check!(oo.open(&filename));
288288
assert_eq!(check!(rw.write_at(write1.as_bytes(), 5)), write1.len());
289-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 0);
289+
assert_eq!(check!(rw.stream_position()), 0);
290290
assert_eq!(check!(rw.read_at(&mut buf, 5)), write1.len());
291291
assert_eq!(str::from_utf8(&buf[..write1.len()]), Ok(write1));
292-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 0);
292+
assert_eq!(check!(rw.stream_position()), 0);
293293
assert_eq!(check!(rw.read_at(&mut buf[..write2.len()], 0)), write2.len());
294294
assert_eq!(str::from_utf8(&buf[..write2.len()]), Ok("\0\0\0\0\0"));
295-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 0);
295+
assert_eq!(check!(rw.stream_position()), 0);
296296
assert_eq!(check!(rw.write(write2.as_bytes())), write2.len());
297-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 5);
297+
assert_eq!(check!(rw.stream_position()), 5);
298298
assert_eq!(check!(rw.read(&mut buf)), write1.len());
299299
assert_eq!(str::from_utf8(&buf[..write1.len()]), Ok(write1));
300-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
300+
assert_eq!(check!(rw.stream_position()), 9);
301301
assert_eq!(check!(rw.read_at(&mut buf[..write2.len()], 0)), write2.len());
302302
assert_eq!(str::from_utf8(&buf[..write2.len()]), Ok(write2));
303-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
303+
assert_eq!(check!(rw.stream_position()), 9);
304304
assert_eq!(check!(rw.write_at(write3.as_bytes(), 9)), write3.len());
305-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
305+
assert_eq!(check!(rw.stream_position()), 9);
306306
}
307307
{
308308
let mut read = check!(File::open(&filename));
309309
assert_eq!(check!(read.read_at(&mut buf, 0)), content.len());
310310
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
311-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 0);
311+
assert_eq!(check!(read.stream_position()), 0);
312312
assert_eq!(check!(read.seek(SeekFrom::End(-5))), 9);
313313
assert_eq!(check!(read.read_at(&mut buf, 0)), content.len());
314314
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
315-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 9);
315+
assert_eq!(check!(read.stream_position()), 9);
316316
assert_eq!(check!(read.read(&mut buf)), write3.len());
317317
assert_eq!(str::from_utf8(&buf[..write3.len()]), Ok(write3));
318-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
318+
assert_eq!(check!(read.stream_position()), 14);
319319
assert_eq!(check!(read.read_at(&mut buf, 0)), content.len());
320320
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
321-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
321+
assert_eq!(check!(read.stream_position()), 14);
322322
assert_eq!(check!(read.read_at(&mut buf, 14)), 0);
323323
assert_eq!(check!(read.read_at(&mut buf, 15)), 0);
324-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
324+
assert_eq!(check!(read.stream_position()), 14);
325325
}
326326
check!(fs::remove_file(&filename));
327327
}
@@ -364,38 +364,38 @@ fn file_test_io_seek_read_write() {
364364
let oo = OpenOptions::new().create_new(true).write(true).read(true).clone();
365365
let mut rw = check!(oo.open(&filename));
366366
assert_eq!(check!(rw.seek_write(write1.as_bytes(), 5)), write1.len());
367-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
367+
assert_eq!(check!(rw.stream_position()), 9);
368368
assert_eq!(check!(rw.seek_read(&mut buf, 5)), write1.len());
369369
assert_eq!(str::from_utf8(&buf[..write1.len()]), Ok(write1));
370-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
370+
assert_eq!(check!(rw.stream_position()), 9);
371371
assert_eq!(check!(rw.seek(SeekFrom::Start(0))), 0);
372372
assert_eq!(check!(rw.write(write2.as_bytes())), write2.len());
373-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 5);
373+
assert_eq!(check!(rw.stream_position()), 5);
374374
assert_eq!(check!(rw.read(&mut buf)), write1.len());
375375
assert_eq!(str::from_utf8(&buf[..write1.len()]), Ok(write1));
376-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 9);
376+
assert_eq!(check!(rw.stream_position()), 9);
377377
assert_eq!(check!(rw.seek_read(&mut buf[..write2.len()], 0)), write2.len());
378378
assert_eq!(str::from_utf8(&buf[..write2.len()]), Ok(write2));
379-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 5);
379+
assert_eq!(check!(rw.stream_position()), 5);
380380
assert_eq!(check!(rw.seek_write(write3.as_bytes(), 9)), write3.len());
381-
assert_eq!(check!(rw.seek(SeekFrom::Current(0))), 14);
381+
assert_eq!(check!(rw.stream_position()), 14);
382382
}
383383
{
384384
let mut read = check!(File::open(&filename));
385385
assert_eq!(check!(read.seek_read(&mut buf, 0)), content.len());
386386
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
387-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
387+
assert_eq!(check!(read.stream_position()), 14);
388388
assert_eq!(check!(read.seek(SeekFrom::End(-5))), 9);
389389
assert_eq!(check!(read.seek_read(&mut buf, 0)), content.len());
390390
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
391-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
391+
assert_eq!(check!(read.stream_position()), 14);
392392
assert_eq!(check!(read.seek(SeekFrom::End(-5))), 9);
393393
assert_eq!(check!(read.read(&mut buf)), write3.len());
394394
assert_eq!(str::from_utf8(&buf[..write3.len()]), Ok(write3));
395-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
395+
assert_eq!(check!(read.stream_position()), 14);
396396
assert_eq!(check!(read.seek_read(&mut buf, 0)), content.len());
397397
assert_eq!(str::from_utf8(&buf[..content.len()]), Ok(content));
398-
assert_eq!(check!(read.seek(SeekFrom::Current(0))), 14);
398+
assert_eq!(check!(read.stream_position()), 14);
399399
assert_eq!(check!(read.seek_read(&mut buf, 14)), 0);
400400
assert_eq!(check!(read.seek_read(&mut buf, 15)), 0);
401401
}

library/std/src/io/buffered/tests.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ fn test_buffered_reader_seek() {
114114

115115
assert_eq!(reader.seek(SeekFrom::Start(3)).ok(), Some(3));
116116
assert_eq!(reader.fill_buf().ok(), Some(&[0, 1][..]));
117-
assert_eq!(reader.seek(SeekFrom::Current(0)).ok(), Some(3));
117+
assert_eq!(reader.stream_position().ok(), Some(3));
118118
assert_eq!(reader.fill_buf().ok(), Some(&[0, 1][..]));
119119
assert_eq!(reader.seek(SeekFrom::Current(1)).ok(), Some(4));
120120
assert_eq!(reader.fill_buf().ok(), Some(&[1, 2][..]));
@@ -230,6 +230,9 @@ fn test_buffered_reader_seek_underflow() {
230230
Ok(len)
231231
}
232232
}
233+
// note: this implementation of `Seek` is "broken" due to position
234+
// wrapping, so calling `reader.seek(Current(0))` is semantically different
235+
// than `reader.stream_position()`
233236
impl Seek for PositionReader {
234237
fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
235238
match pos {
@@ -374,7 +377,7 @@ fn test_buffered_writer_seek() {
374377
let mut w = BufWriter::with_capacity(3, io::Cursor::new(Vec::new()));
375378
w.write_all(&[0, 1, 2, 3, 4, 5]).unwrap();
376379
w.write_all(&[6, 7]).unwrap();
377-
assert_eq!(w.seek(SeekFrom::Current(0)).ok(), Some(8));
380+
assert_eq!(w.stream_position().ok(), Some(8));
378381
assert_eq!(&w.get_ref().get_ref()[..], &[0, 1, 2, 3, 4, 5, 6, 7][..]);
379382
assert_eq!(w.seek(SeekFrom::Start(2)).ok(), Some(2));
380383
w.write_all(&[8, 9]).unwrap();

0 commit comments

Comments
 (0)