Commit graph

1410 commits

Author SHA1 Message Date
Ivan Tham
62e86b42b5
Fix inconsistent link formatting 2019-09-16 20:02:36 +08:00
Tomasz Różański
a8c5f90b06 Fix inconsistent link formatting. 2019-09-11 14:03:40 +02:00
Daniel Henry-Mantilla
b03d3dc478 Changed comment to better reflect std's exceptional situation 2019-09-03 15:36:21 +02:00
Daniel Henry-Mantilla
23c76ff7b9 Added warning around code with reference to uninit bytes 2019-09-03 12:18:09 +02:00
John Erickson
1b946106b7 clarify that not all errors are observed 2019-08-31 07:38:13 -07:00
John Erickson
cccce09dda Add in generic type to description of BufReader and BufWriter 2019-08-31 07:38:13 -07:00
John Erickson
c8e474871a Update BufWriter example to include call to flush() 2019-08-31 07:38:02 -07:00
Jack O'Connor
edb5214b29 avoid unnecessary reservations in std::io::Take::read_to_end
Prevously the `read_to_end` implementation for `std::io::Take` used its
own `limit` as a cap on the `reservation_size`. However, that could
still result in an over-allocation like this:

1. Call `reader.take(5).read_to_end(&mut vec)`.
2. `read_to_end_with_reservation` reserves 5 bytes and calls `read`.
3. `read` writes 5 bytes.
4. `read_to_end_with_reservation` reserves 5 bytes and calls `read`.
5. `read` writes 0 bytes.
6. The read loop ends with `vec` having length 5 and capacity 10.

The reservation of 5 bytes was correct for the read at step 2 but
unnecessary for the read at step 4. By that second read, `Take::limit`
is 0, but the `read_to_end_with_reservation` loop is still using the
same `reservation_size` it started with.

Solve this by having `read_to_end_with_reservation` take a closure,
which lets it get a fresh `reservation_size` for each read. This is an
implementation detail which doesn't affect any public API.
2019-08-06 10:15:11 -04:00
Thomas de Zeeuw
dad56c3947 Add {IoSlice, IoSliceMut}::advance 2019-08-03 10:44:45 +02:00
Pietro Albini
9ff52752d8
Rollup merge of #62644 - arnottcr:std_io-doc, r=steveklabnik
simplify std::io::Write::write rustdoc

The std::io::Write::write method currensly suggests consumers guaranteed
that `0 <= n <= buf.len()`, for `Ok(n)`, however `n` is of type `usize`
causing the compiler to emit a warning:
```
warning: comparison is useless due to type limits
 --> lib.rs:6:18
  |
6 |         Ok(n) => 0 <= n && n <= output.len(),
  |                  ^^^^^^
  |
  = note: #[warn(unused_comparisons)] on by default
```

This PR removes the suggestion to check `0 <= n` since it is moot.

r? @steveklabnik
2019-08-01 16:00:22 +02:00
Mazdak Farrokhzad
b405aa2d03
Rollup merge of #62806 - mati865:clippy, r=TimNN
Fix few Clippy warnings
2019-07-28 11:11:08 +02:00
Mazdak Farrokhzad
b94e59cc41
Rollup merge of #62845 - RalfJung:read, r=rkruppe
read: fix doc comment

No idea how that happened...
2019-07-22 15:32:23 +02:00
Ralf Jung
8dc5635e13 read: fix doc comment 2019-07-21 12:47:34 +02:00
Ralf Jung
7c1e405478 ONCE_INIT is deprecated-in-future only for bootstrap 2019-07-19 09:48:06 +02:00
Ralf Jung
13ed0cf9e8 do not use mem::uninitialized in std::io 2019-07-19 09:45:38 +02:00
Mateusz Mikuła
124f6ef7cd Fix clippy::len_zero warnings 2019-07-18 15:14:56 +02:00
nathanwhit
04f0d309dc Remove last use of mem::uninitialized from std::io::util 2019-07-16 22:41:38 -04:00
Colin Arnott
e8e13f04b2
simplify std::io::Write::write rustdoc
The std::io::Write::write method currensly suggests consumers guaranteed
that `0 <= n <= buf.len()`, for `Ok(n)`, however `n` is of type `usize`
causing the compiler to emit a warning:
```
warning: comparison is useless due to type limits
 --> lib.rs:6:18
  |
6 |         Ok(n) => 0 <= n && n <= output.len(),
  |                  ^^^^^^
  |
  = note: #[warn(unused_comparisons)] on by default
```

This PR removes the suggestion to check `0 <= n` since it is moot.

r? @steveklabnik
2019-07-13 01:50:45 +00:00
Mazdak Farrokhzad
c5d18600ef
Rollup merge of #62381 - pawroman:fix_typo_in_write_vectored, r=Centril
Fix a typo in Write::write_vectored docs

Fixed what seems like a typo. "Copy to from" is extremely confusing.
2019-07-05 20:27:02 +02:00
Mark Rousskov
007d87f171 Permit use of mem::uninitialized via allow(deprecated) 2019-07-04 21:01:35 -04:00
Paweł Romanowski
7f035baaf7 Fix a typo in Write::write_vectored docs 2019-07-04 18:44:34 +02:00
Ralf Jung
390f717a0a tweak wording 2019-06-25 22:59:00 +02:00
Ralf Jung
1c12b1be33 call out explicitly that general read needs to be called with an initialized buffer 2019-06-24 22:58:53 +02:00
Mazdak Farrokhzad
405edc71fd
Rollup merge of #61235 - lzutao:stabilize-bufreader_buffer, r=Centril
Stabilize bufreader_buffer feature

FCP done in https://github.com/rust-lang/rust/issues/45323#issuecomment-495937047

Closes #45323

r? @SimonSapin
2019-05-29 08:15:58 +02:00
Lzu Tao
06eb412741 Stabilize bufreader_buffer feature 2019-05-27 13:42:21 +00:00
Chris Gregory
b1ae49cae0 Annotate test with #[test] 2019-05-25 16:37:38 -05:00
Chris Gregory
f27ec0f05f Add test that impl Seek for BufReader correctly invalidates buffer between seeks 2019-05-25 15:02:35 -05:00
Mazdak Farrokhzad
a34dae3587
Rollup merge of #60511 - taiki-e:libstd-intra-doc, r=Dylan-DPC
Fix intra-doc link resolution failure on re-exporting libstd

Currently, re-exporting libstd items as below will [occur a lot of failures](https://gist.github.com/taiki-e/e33e0e8631ef47f65a74a3b69f456366).
```rust
pub use std::*;
```

Until the underlying issue (#56922) fixed, we can fix that so they don't propagate to downstream crates.

Related: https://github.com/rust-lang/rust/pull/56941 (That PR fixed failures that occur when re-exporting from libcore to libstd.)

r? @QuietMisdreavus
2019-05-20 23:02:59 +02:00
Brent Kerby
01cf36ebde Simplify BufRead doc example using NLL 2019-05-18 13:30:44 -06:00
Mazdak Farrokhzad
bd17b5c9a2
Rollup merge of #60234 - tesaguri:cursor-default, r=Amanieu
std: Derive `Default` for `io::Cursor`

I think this change is quite obvious, so made it insta-stable, but I won't insist on that.
2019-05-09 23:56:11 +02:00
Peter Todd
b9c430129d
Inline some Cursor calls for slices
(Partially) brings back https://github.com/rust-lang/rust/pull/33921
2019-05-08 22:39:41 -04:00
Taiki Endo
ccb9dac5ed Fix intra-doc link resolution failure on re-exporting libstd 2019-05-04 23:48:57 +09:00
Mazdak Farrokhzad
ead8d81301
Rollup merge of #60334 - sfackler:stable-iovec, r=alexcrichton
Stabilized vectored IO

This renames `std::io::IoVec` to `std::io::IoSlice` and
`std::io::IoVecMut` to `std::io::IoSliceMut`, and stabilizes
`std::io::IoSlice`, `std::io::IoSliceMut`,
`std::io::Read::read_vectored`, and `std::io::Write::write_vectored`.

Closes #58452

r? @alexcrichton
2019-04-29 22:22:40 +02:00
Steven Fackler
89ff7cde5a tidy 2019-04-27 09:19:34 -07:00
Steven Fackler
bd177f3ea3 Stabilized vectored IO
This renames `std::io::IoVec` to `std::io::IoSlice` and
`std::io::IoVecMut` to `std::io::IoSliceMut`, and stabilizes
`std::io::IoSlice`, `std::io::IoSliceMut`,
`std::io::Read::read_vectored`, and `std::io::Write::write_vectored`.

Closes #58452
2019-04-27 08:34:08 -07:00
Matthias Geier
be12ab070d Use "capacity" as parameter name in with_capacity() methods
Closes #60271.
2019-04-26 18:43:24 +02:00
Daiki Mizukami
902904a79a
std: Derive Default for io::Cursor 2019-04-24 20:24:57 +09:00
Mazdak Farrokhzad
271eb8fc5a
Rollup merge of #59906 - czipperz:bufwriter-use-getmut, r=kennytm
Make BufWriter use get_mut instead of manipulating inner in Write implementation

`get_mut` allows us to abstract over the implementation detail of inner being optional.
2019-04-14 17:49:24 +02:00
Chris Gregory
ac5e755164 Make BufWriter use get_mut instead of manipulating inner in Write implementation
get_mut allows us to abstract over the implementation detail of inner being
optional.
2019-04-11 23:57:29 -05:00
Alex Crichton
acf3ddb5ad std: Add {read,write}_vectored for more types
This commit implements the `{read,write}_vectored` methods on more types
in the standard library, namely:

* `std::fs::File`
* `std::process::ChildStd{in,out,err}`
* `std::io::Std{in,out,err}`
* `std::io::Std{in,out,err}Lock`
* `std::io::Std{in,out,err}Raw`

Where supported the OS implementations hook up to native support,
otherwise it falls back to the already-defaulted implementation.
2019-04-10 12:51:25 -07:00
Mazdak Farrokhzad
379c380a60 libstd: deny(elided_lifetimes_in_paths) 2019-03-31 12:56:51 +02:00
Matt Brubeck
b6fb3e3411 In doc examples, don't ignore read/write results
Calling `Read::read` or `Write::write` without checking the returned
`usize` value is almost always an error.  Example code in the
documentation should demonstrate how to use the return value correctly.
Otherwise, people might copy the example code thinking that it is okay
to "fire and forget" these methods.
2019-03-29 11:50:41 -07:00
Matt Brubeck
8dbae794b0 Use write_all instead of write in example code 2019-03-28 11:28:50 -07:00
Mazdak Farrokhzad
d403cd787c
Rollup merge of #59474 - czipperz:bufwriter-fix-link-capitalization, r=Centril
Fix link capitalization in documentation of std::io::BufWriter.
2019-03-28 08:43:43 +01:00
Chris Gregory
e1e0e53f16 Fix link capitalization in documentation of std::io::BufWriter. 2019-03-27 23:01:24 -04:00
Chris Gregory
ffaa5c904e Document that std::io::BufReader discards contents on drop
Resolves #55546
2019-03-27 22:11:13 -04:00
Lukas Kalbertodt
c97d3d4dd1
Add tracking issue number for seek_convenience 2019-03-22 11:25:44 +01:00
bors
89573b3c8b Auto merge of #58422 - LukasKalbertodt:seek-convenience, r=alexcrichton
Add provided methods `Seek::{stream_len, stream_position}`

This adds two new, provided methods to the `io::Seek` trait:
- `fn stream_len(&mut self) -> Result<u64>`
- `fn stream_position(&mut self) -> Result<u64>`

Both are added for convenience and to improve readability in user code. Reading `file.stream_len()` is much better than to manually seek two or three times. Similarly, `file.stream_position()` is much more clear than `file.seek(SeekFrom::Current(0))`.

You can find prior discussions [in this internals thread](https://internals.rust-lang.org/t/pre-rfc-idea-extend-io-seek-with-convenience-methods-with-e-g-stream-len/9262). I think I addressed all concerns in that thread.

I already wrote three RFCs to add a small new API to libstd but I noticed that many public changes to libstd happen without an RFC. So I figured I can try opening a PR directly without going through RFCs first. After all, we do have rfcbot here too. If you think this change is too big to merge without an RFC, I can still close this PR and write an RFC.
2019-03-21 14:28:18 +00:00
bors
15a5dfa0b4 Auto merge of #58913 - Milack27:patch_buf_reader, r=joshtriplett
Add new test case for possible bug in BufReader

When reading a large chunk from a BufReader, if all the bytes from the buffer have been already consumed, the internal buffer is bypassed entirely. However, it is not invalidated, and it's possible to access its contents using the `seek_relative` method, because it tries to reuse the existing buffer.
2019-03-21 05:41:13 +00:00
Tobias Bucher
f95219fa58
Apply suggestions from code review
Fix typos in the documentation

Co-Authored-By: LukasKalbertodt <lukas.kalbertodt@gmail.com>
2019-03-17 09:39:47 +01:00