Commit Graph

1462 Commits

Author SHA1 Message Date
Elinvynia 05fc7faacb Better documentation for io::Read::read() return value 2020-05-09 01:17:20 +02:00
Dylan DPC fb1aa5624d Rollup merge of #71296 - ChiefMilesEdgeworth:fix_doc_wording, r=Dylan-DPC
Change wording on read_vectored docs

Closes #70154

I'm happy to work with others to make the wording on this more clear. I think what I have is an improvement but may not be the final wording.
2020-04-29 12:23:22 +02:00
Steven Fackler 5d8fe1c4e6 Suppress file length check temporarily
Will clean up in a separate PR
2020-04-26 04:48:51 -07:00
Steven Fackler 07443f17d4 Update name 2020-04-26 04:24:16 -07:00
Steven Fackler 15262ec6be Add Read/Write::can_read/write_vectored
When working with an arbitrary reader or writer, code that uses vectored
operations may end up being slower than code that copies into a single
buffer when the underlying reader or writer doesn't actually support
vectored operations. These new methods allow you to ask the reader or
witer up front if vectored operations are efficiently supported.

Currently, you have to use some heuristics to guess by e.g. checking if
the read or write only accessed the first buffer. Hyper is one concrete
example of a library that has to do this dynamically:
https://github.com/hyperium/hyper/blob/0eaf304644a396895a4ce1f0146e596640bb666a/src/proto/h1/io.rs#L582-L594
2020-04-26 04:23:39 -07:00
Dylan DPC ecef6c7c80 Rollup merge of #71545 - Askaholic:patch-1, r=jonas-schievink
Fix comment in docstring example for Error::kind

Saw it while reading the docs.
2020-04-25 18:30:32 +02:00
Askaholic 19c29c4d9c Fix comment in docstring example for Error::kind 2020-04-25 04:33:11 +00:00
Josh Stone 4282776b1c Replace filter_map().next() calls with find_map()
These are semantically the same, but `find_map()` is more concise.
2020-04-24 20:03:45 -07:00
Nathan Abel 3a40cbb665 Change wording on read_vectored docs 2020-04-18 14:30:16 -04:00
Dylan DPC 5768385615 Rollup merge of #70612 - Thomasdezeeuw:issue_70436, r=LukasKalbertodt
Add io::Write::write_all_vectored

Similar to io::Write::write_all but uses io::Write::write_vectored
instead.

Updates #70436

/cc @cramertj @sfackler
2020-04-07 00:31:36 +02:00
Thomas de Zeeuw 5d09f9f051 Put reference to write_vectored in quotes in doc 2020-04-07 00:00:07 +02:00
Thomas de Zeeuw 63118d1fd7 Improve io::Write::write_all_vectored docs
Also adds some more tests with different length IoSlices.
2020-04-06 11:21:15 +02:00
Thomas de Zeeuw ba91e7e374 Fix link to write_vectored 2020-04-01 19:41:57 +02:00
Thomas de Zeeuw 9745b1fc52 Use unspecified over undefined in io::Write::write_all_vectored docs 2020-04-01 15:39:05 +02:00
Thomas de Zeeuw 33a49993b4 Add io::Write::write_all_vectored
Similar to io::Write::write_all but uses io::Write::write_vectored
instead.
2020-03-31 20:22:09 +02:00
Matthias Krüger 08f2904dfa more clippy fixes
use is_empty() instead of len comparison (clippy::len_zero)
use if let instead of while let loop that never loops (clippy::never_loop)
remove redundant returns (clippy::needless_return)
remove redundant closures (clippy::redundant_closure)
use if let instead of match and wildcard pattern (clippy::single_match)
don't repeat field names redundantly (clippy::redundant_field_names)
2020-03-31 15:20:05 +02:00
Without Boats 03c64bf532 spaces between braces really ruin readability 2020-03-24 15:39:29 +01:00
Without Boats 3cc4ef9326 correct rustc version 2020-03-24 00:34:48 +01:00
Without Boats 4dda632faf IoSlice/IoSliceMut should be Send and Sync 2020-03-24 00:33:25 +01:00
Dylan DPC 39c52225dd Rollup merge of #70232 - adrian5:patch-1, r=Dylan-DPC
Tweak wording for std::io::Read::read function

I think the sentence as a whole reads smoother that way.
2020-03-21 22:56:30 +01:00
adrian5 0b307f7a9f Tweak wording for std::io::Read::read function 2020-03-21 17:06:10 +01:00
Dylan DPC 276b54e9c9 Rollup merge of #69955 - alexcrichton:stderr-infallible, r=sfackler
Fix abort-on-eprintln during process shutdown

This commit fixes an issue where if `eprintln!` is used in a TLS
destructor it can accidentally cause the process to abort. TLS
destructors are executed after `main` returns on the main thread, and at
this point we've also deinitialized global `Lazy` values like those
which store the `Stderr` and `Stdout` internals. This means that despite
handling TLS not being accessible in `eprintln!`, we will fail due to
not being able to call `stderr()`. This means that we'll double-panic
quickly because panicking also attempt to write to stderr.

The fix here is to reimplement the global stderr handle to avoid the
need for destruction. This avoids the need for `Lazy` as well as the
hidden panic inside of the `stderr` function.

Overall this should improve the robustness of printing errors and/or
panics in weird situations, since the `stderr` accessor should be
infallible in more situations.
2020-03-21 13:06:38 +01:00
Alex Crichton 5edaa7eefd Fix abort-on-eprintln during process shutdown
This commit fixes an issue where if `eprintln!` is used in a TLS
destructor it can accidentally cause the process to abort. TLS
destructors are executed after `main` returns on the main thread, and at
this point we've also deinitialized global `Lazy` values like those
which store the `Stderr` and `Stdout` internals. This means that despite
handling TLS not being accessible in `eprintln!`, we will fail due to
not being able to call `stderr()`. This means that we'll double-panic
quickly because panicking also attempt to write to stderr.

The fix here is to reimplement the global stderr handle to avoid the
need for destruction. This avoids the need for `Lazy` as well as the
hidden panic inside of the `stderr` function.

Overall this should improve the robustness of printing errors and/or
panics in weird situations, since the `stderr` accessor should be
infallible in more situations.
2020-03-20 07:34:56 -07:00
Mazdak Farrokhzad 73c3a496cc Rollup merge of #69959 - alexcrichton:fix-panic-in-print, r=Mark-Simulacrum
std: Don't abort process when printing panics in tests

This commit fixes an issue when using `set_print` and friends, notably
used by libtest, to avoid aborting the process if printing panics. This
previously panicked due to borrowing a mutable `RefCell` twice, and this
is worked around by borrowing these cells for less time, instead
taking out and removing contents temporarily.

Closes #69558
2020-03-19 06:57:36 +01:00
Alex Crichton d5b6a20557 std: Don't abort process when printing panics in tests
This commit fixes an issue when using `set_print` and friends, notably
used by libtest, to avoid aborting the process if printing panics. This
previously panicked due to borrowing a mutable `RefCell` twice, and this
is worked around by borrowing these cells for less time, instead
taking out and removing contents temporarily.

Closes #69558
2020-03-18 07:06:13 -07:00
Yuki Okushi 5d90154886 Rollup merge of #69403 - LeSeulArtichaut:copy-ioslice, r=sfackler
Implement `Copy` for `IoSlice`

Resolves #69395

r? @sfackler
2020-03-14 04:03:20 +09:00
Mazdak Farrokhzad 61150353bf Rollup merge of #69514 - GuillaumeGomez:remove-spotlight, r=kinnison
Remove spotlight

I had a few comments saying that this feature was at best misunderstood or not even used so I decided to organize a poll about on [twitter](https://twitter.com/imperioworld_/status/1232769353503956994). After 87 votes, the result is very clear: it's not useful. Considering the amount of code we have just to run it, I think it's definitely worth it to remove it.

r? @kinnison

cc @ollie27
2020-03-10 06:47:47 +01:00
Matthias Krüger 83980aca20 Don't redundantly repeat field names (clippy::redundant_field_names) 2020-03-06 19:42:18 +01:00
Matthias Krüger 7c84ba1124 use char instead of &str for single char patterns 2020-02-27 14:57:22 +01:00
Guillaume Gomez 13c6d5819a Remove spotlight usage 2020-02-27 14:51:22 +01:00
Jakub Kądziołka b3e0d272af docs: Stdin::read_line: mention the appending 2020-02-23 21:19:25 +01:00
LeSeulArtichaut 79b8ad84c8 Implement Copy for IoSlice 2020-02-23 18:32:36 +01:00
Yuki Okushi df7d9f3838 Fix issue number of capacity method 2020-02-05 15:34:33 +09:00
bors c9290dceee Auto merge of #68558 - HeroicKatora:buf-writer-capacity, r=alexcrichton
Add a method to query the capacity of a BufWriter and BufReader

Besides the obvious of retrieving the parameter used to construct the writer, this method allows consumers to control the number of `flush` calls during write operations. For `BufReader` it gives an upper bound on the returned buffer in `fill_buf` which might influence the allocation behaviour of a consumer.
2020-02-04 20:30:53 +00:00
Josh Triplett 9bb2a50e04 Document that write_all will not call write if given an empty buffer
Some types of Write instances have a semantic meaning associated with
writing an empty buffer, such as sending an empty packet. This works
when calling `write` directly, and supplying an empty buffer. However,
calling `write_all` on an empty buffer will simply never call `write`,
because `write_all` assumes it has no work to do.

Document this behavior, to help prospective users of
datagram-packet-style Write instances.
2020-01-28 17:22:38 -08:00
Andreas Molzer aebd0d7339 Add capacity to BufReader with same unstable gate 2020-01-28 14:19:44 +01:00
Andreas Molzer 47ae565ed4 Add a method to query the capacity of a BufWriter 2020-01-26 21:52:04 +01:00
Lzu Tao dd8f072233 Use drop instead of the toilet closure |_| () 2020-01-02 08:56:12 +00:00
David Tolnay 4646a88b7a Deprecate Error::description for real
`description` has been documented as soft-deprecated since 1.27.0 (17
months ago). There is no longer any reason to call it or implement it.

This commit:

- adds #[rustc_deprecated(since = "1.41.0")] to Error::description;

- moves description (and cause, which is also deprecated) below the
  source and backtrace methods in the Error trait;

- reduces documentation of description and cause to take up much less
  vertical real estate in rustdocs, while preserving the example that
  shows how to render errors without needing to call description;

- removes the description function of all *currently unstable* Error
  impls in the standard library;

- marks #[allow(deprecated)] the description function of all *stable*
  Error impls in the standard library;

- replaces miscellaneous uses of description in example code and the
  compiler.
2019-12-24 22:39:49 -08:00
Mazdak Farrokhzad 75b27ef59c Rollup merge of #67561 - euclio:remove-description, r=jonas-schievink
remove `description` from `Error` impls in docs

Since `description` is soft-deprecated, there's no need to show it implemented in these examples.
2019-12-24 04:40:00 +01:00
Andy Russell 24f3dcfdc7 remove description from Error impls in docs 2019-12-23 09:47:28 -06:00
Mazdak Farrokhzad 260514da94 Rollup merge of #67233 - Luro02:cursor_traits, r=sfackler
Add PartialEq and Eq to Cursor

closes #67226
2019-12-23 15:16:21 +01:00
Mark Rousskov a06baa56b9 Format the world 2019-12-22 17:42:47 -05:00
Luro02 89986a39a8 add partialeq and eq to cursor 2019-12-22 10:39:58 +01:00
Ross MacArthur f7256d28d1 Require issue = "none" over issue = "0" in unstable attributes 2019-12-21 13:16:18 +02:00
Alex Crichton 2fee28e713 std: Implement LineWriter::write_vectored
This commit implements the `write_vectored` method of the `LineWriter`
type. First discovered in bytecodealliance/wasmtime#629 the
`write_vectored` method of `Stdout` bottoms out here but only ends up
writing the first buffer due to the default implementation of
`write_vectored`.

Like `BufWriter`, however, `LineWriter` can have a non-default
implementation of `write_vectored` which tries to preserve the
vectored-ness as much as possible. Namely we can have a vectored write
for everything before the newline and everything after the newline if
all the stars align well.

Also like `BufWriter`, though, special care is taken to ensure that
whenever bytes are written we're sure to signal success since that
represents a "commit" of writing bytes.
2019-12-12 16:51:25 -08:00
Tomasz Miąsko 92bc35f7b6 Simplify {IoSlice, IoSliceMut}::advance examples and tests
Remove unnecessary calls to `std::mem::replace` and make variables immutable.
2019-12-05 00:00:00 +00:00
David Tolnay 4436c9d354 Format libstd with rustfmt
This commit applies rustfmt with rust-lang/rust's default settings to
files in src/libstd *that are not involved in any currently open PR* to
minimize merge conflicts. THe list of files involved in open PRs was
determined by querying GitHub's GraphQL API with this script:
https://gist.github.com/dtolnay/aa9c34993dc051a4f344d1b10e4487e8

With the list of files from the script in outstanding_files, the
relevant commands were:

    $ find src/libstd -name '*.rs' \
        | xargs rustfmt --edition=2018 --unstable-features --skip-children
    $ rg libstd outstanding_files | xargs git checkout --

Repeating this process several months apart should get us coverage of
most of the rest of libstd.

To confirm no funny business:

    $ git checkout $THIS_COMMIT^
    $ git show --pretty= --name-only $THIS_COMMIT \
        | xargs rustfmt --edition=2018 --unstable-features --skip-children
    $ git diff $THIS_COMMIT  # there should be no difference
2019-11-29 18:43:27 -08:00
Bryan Burgers 413ab57c02 docs: Fix link to BufWriter::flush
One of the links in the docs was being rendered as a literal
open-bracket followed by a single quote, instead of being transformed
into a link. Fix it to match the link earlier in the same paragraph.
2019-11-08 10:18:58 -06:00
Marco Conte 5b5196ad65 rephrase sentence regarding data loss when using BufReader::into_inner 2019-10-31 10:48:33 +00:00