Commit Graph

1390 Commits

Author SHA1 Message Date
Mark Rousskov 007d87f171 Permit use of mem::uninitialized via allow(deprecated) 2019-07-04 21:01:35 -04: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
kennytm d3f30c30ea Rollup merge of #59009 - sfackler:fix-sgx-vectors, r=alexcrichton
Fix SGX implementations of read/write_vectored.
2019-03-16 22:39:15 +08:00
Lukas Kalbertodt ea40aa46e7 Change "undefined" to "unspecified" in Seek::stream_len docs 2019-03-14 17:51:11 +01:00
Lukas Kalbertodt c518f2dd70 Overwrite Cursor's Seek::stream_{len, position} for performance 2019-03-14 13:43:19 +01:00
Lukas Kalbertodt 598a1b4dd1 Avoid third seek operation in Seek::stream_len when possible 2019-03-14 13:43:17 +01:00
Lukas Kalbertodt e8ee00a649 Add provided methods Seek::{stream_len, stream_position}
These two methods are defined in terms of `Seek::seek` and are
added for convenience. Tests are included.
2019-03-10 18:06:49 +01:00
bors e1b8898cfb Auto merge of #57882 - euclio:unused-doc-attributes, r=estebank
overhaul unused doc comments lint

This PR contains a number of improvements to the `unused_doc_comments` lint.

- Extends the span to cover the entire comment when using sugared doc comments.
- Triggers the lint for all unused doc comments on a node, instead of just the first one.
- Triggers the lint on macro expansions, and provides a help note explaining that doc comments must be expanded by the macro.
- Adds a label pointing at the node that cannot be documented.

Furthermore, this PR fixes any instances in rustc where a macro expansion was erroneously documented.
2019-03-09 08:17:48 +00:00
Andy Russell daf80f721b expand unused doc comment diagnostic
Report the diagnostic on macro expansions, and add a label indicating
why the comment is unused.
2019-03-08 12:39:50 -05:00
Steven Fackler ab8e1d264e Always call read/write from default vectored io methods 2019-03-07 19:31:58 -08:00
André Vicente Milack c36d91c5cc Fix buffer invalidation at BufReader.read_vectored 2019-03-06 16:37:15 -03:00
André Vicente Milack 96e361f6f4 Fix buffer invalidation for BufRead
There are two moments when a BufRead object needs to empty it's internal
buffer:

- In a seek call;
- In a read call when all data in the internal buffer had been already
  consumed and the output buffer has a greater or equal size than the
  internal buffer.

In both cases, the buffer was not being properly emptied, but only
marked as consumed (self.pos = self.cap). That should be no problem if
the inner reader is only Read, but if it is Seek as well, then it's
possible to access the data in the buffer by using the seek_relative
method. In order to prevent this from happening, both self.pos and
self.cap should be set to 0.

Two test cases were added to detect that failure:

- test_buffered_reader_invalidated_after_read
- test_buffered_reader_invalidated_after_seek

Both tests are very similar to each other. The inner reader contains the
following data: [5, 6, 7, 0, 1, 2, 3, 4]. The buffer capacity is 3
bytes.

- First, we call fill_buffer, which loads [5, 6, 7] into the internal
  buffer, and then consume those 3 bytes.
- Then we either read the 5 remaining bytes in a single read call or we
  move to the end of the stream by calling seek. In both cases the
  buffer should be emptied to prevent the previous data [5, 6, 7] from
  being read.
- We now call seek_relative(-2) and read two bytes, which should give us
  the last 2 bytes of the stream: [3, 4].

Before this commit, the the seek_relative method would consider that
we're still in the range of the internal buffer, so instead of fetching
data from the inner reader, it would return the two last bytes that were
incorrectly still in the buffer: [6, 7]. Therefore, the test would fail.

Now, when seek_relative is called the buffer is empty. So the expected
data [3, 4] is fetched from the inner reader and the test passes.
2019-03-06 13:04:48 -03:00
Sean McArthur 0d39797dc0 libstd: implement Error::source for io::Error 2019-03-05 19:54:15 -08:00
bors f22dca0a1b Auto merge of #58423 - nox:relax-bounds-buf-reader, r=dtolnay
Relax Read bounds on a bunch of BufReader<R> methods
2019-03-05 05:40:16 +00:00
Jethro Beekman c0e8cf9410 Use the correct stderr when testing libstd 2019-02-28 19:09:17 -08:00
Taiki Endo 93b6d9e086 libstd => 2018 2019-02-28 04:06:15 +09:00
Mazdak Farrokhzad 115c8a1f09 Rollup merge of #58703 - shepmaster:read_line_return, r=centril
Fix copy-pasted typo for read_string return value
2019-02-27 13:32:24 +01:00
bors fb162e6944 Auto merge of #58357 - sfackler:vectored-io, r=alexcrichton
Add vectored read and write support

This functionality has lived for a while in the tokio ecosystem, where
it can improve performance by minimizing copies.

r? @alexcrichton
2019-02-26 02:48:13 +00:00
Jake Goulding f1b88abffb Fix copy-pasted typo for read_string return value 2019-02-25 12:14:02 -05:00
kennytm e3a8f7db47 Rollup merge of #58553 - scottmcm:more-ihle, r=Centril
Use more impl header lifetime elision

Inspired by seeing explicit lifetimes on these two:

- https://doc.rust-lang.org/nightly/std/slice/struct.Iter.html#impl-FusedIterator
- https://doc.rust-lang.org/nightly/std/primitive.u32.html#impl-Not

And a follow-up to https://github.com/rust-lang/rust/pull/54687, that started using IHLE in libcore.

Most of the changes in here fall into two big categories:

- Removing lifetimes from common traits that can essentially never user a lifetime from an input (particularly `Drop`, `Debug`, and `Clone`)

- Forwarding impls that are only possible because the lifetime doesn't matter (like `impl<R: Read + ?Sized> Read for &mut R`)

I omitted things that seemed like they could be more controversial, like the handful of iterators that have a `Item: 'static` despite the iterator having a lifetime or the `PartialEq` implementations [where the flipped one cannot elide the lifetime](https://internals.rust-lang.org/t/impl-type-parameter-aliases/9403/2?u=scottmcm).

I also removed two lifetimes that turned out to be completely unused; see https://github.com/rust-lang/rust/issues/41960#issuecomment-464557423
2019-02-20 11:59:10 +08:00
Scott McMurray 3bea2ca49d Use more impl header lifetime elision
There are two big categories of changes in here

- Removing lifetimes from common traits that can essentially never user a lifetime from an input (particularly `Drop` & `Debug`)
- Forwarding impls that are only possible because the lifetime doesn't matter (like `impl<R: Read + ?Sized> Read for &mut R`)

I omitted things that seemed like they could be more controversial, like the handful of iterators that have a `Item: 'static` despite the iterator having a lifetime or the `PartialEq` implementations where the flipped one cannot elide the lifetime.
2019-02-17 19:42:36 -08:00
Steven Fackler 5ca3b00ce0 Add a tracking issue 2019-02-13 20:26:57 -08:00