Commit Graph

951 Commits

Author SHA1 Message Date
jD91mZM2
abac5e722f Revert unification of interfaces 2018-07-07 06:50:55 +02:00
jD91mZM2
ea6f9f9c55 Remove stability attributes on private types and leftover docs 2018-07-03 11:13:16 +02:00
jD91mZM2
c986310757 Add is_unnamed on redox 2018-06-27 18:37:44 +02:00
jD91mZM2
79bf00f406 Fix tidy checks 2018-06-27 15:10:00 +02:00
jD91mZM2
a4e190546c Horrible attempt at cleaning things up that probably just made it worse 2018-06-27 10:12:34 +02:00
jD91mZM2
c86a7a01e2 Mention redox' behavior in doc comments 2018-06-26 20:31:35 +02:00
Pietro Albini
2348dc5b3f Rollup merge of #51786 - cuviper:stat64-pointers, r=Mark-Simulacrum
Remove unnecessary stat64 pointer casts

In effect, these just casted `&mut stat64` to `*mut stat64`, twice.
That's harmless, but it masked a problem when this was copied to new
code calling `fstatat`, which takes a pointer to `struct stat`.  That
will be fixed by #51785, but let's remove the unnecessary casts here
too.
2018-06-26 11:35:41 +02:00
bors
7d2fa4a4d2 Auto merge of #50630 - sharkdp:fix-50619, r=sfackler
Fix possibly endless loop in ReadDir iterator

Certain directories in `/proc` can cause the `ReadDir` iterator to loop indefinitely. We get an error code (22) when calling libc's `readdir_r` on these directories, but `entry_ptr` is `NULL` at the same time, signalling the end of the directory stream.

This change introduces an internal state to the iterator such that the `Some(Err(..))` value will only be returned once when calling `next`. Subsequent calls will return `None`.

fixes #50619
2018-06-26 03:49:37 +00:00
Josh Stone
490f49fd2a Remove unnecessary stat64 pointer casts
In effect, these just casted `&mut stat64` to `*mut stat64`, twice.
That's harmless, but it masked a problem when this was copied to new
code calling `fstatat`, which takes a pointer to `struct stat`.  That
will be fixed by #51785, but let's remove the unnecessary casts here
too.
2018-06-25 12:34:33 -07:00
Josh Stone
65d31d7269 Use fstatat64 where available 2018-06-25 11:42:27 -07:00
Adam Barth
03a40b31a7 Update zx_cprng_draw_new on Fuchsia
Fuchsia is changing the semantics for zx_cprng_draw and
zx_cprng_draw_new is a temporary name for the new semantics.
2018-06-19 09:46:51 -07:00
NODA, Kai
b81da27862 libstd: add an RAII utility for sys_common::mutex::Mutex
Signed-off-by: NODA, Kai <nodakai@gmail.com>
2018-06-17 15:18:32 +08:00
Guillaume Gomez
6a03884ce9 Fix issue on unix 2018-06-15 10:00:57 +02:00
sharkdp
af75314ecd Fix possibly endless loop in ReadDir iterator
Certain directories in `/proc` can cause the `ReadDir`
iterator to loop indefinitely. We get an error code (22) when
calling libc's `readdir_r` on these directories, but `entry_ptr`
is `NULL` at the same time, signalling the end of the directory
stream.

This change introduces an internal state to the iterator such
that the `Some(Err(..))` value will only be returned once when
calling `next`. Subsequent calls will return `None`.

fixes #50619
2018-06-12 21:03:27 +02:00
bors
40f20b5327 Auto merge of #51359 - cramertj:fdio_spawn, r=sfackler
[fuchsia] Migrate from launchpad to fdio_spawn_etc

fdio_spawn_etc is the preferred way of creating processes on Fuchsia
now.

cc @abarth
2018-06-09 03:41:31 +00:00
Adam Barth
0c6cd26aec [fuchsia] Migrate from launchpad to fdio_spawn_etc
fdio_spawn_etc is the preferred way of creating processes on Fuchsia
now.
2018-06-07 09:22:59 -07:00
Mark Simulacrum
753e8f328f Rollup merge of #51255 - avdv:patch-1, r=kennytm
Fix confusing error message for sub_instant

When subtracting an Instant from another, the function will panick when `RHS > self`, but the error message confusingly displays a different error:

```rust
let i = Instant::now();
let other = Instant::now();
if other > i {
    println!("{:?}", i - other);
}
```
This results in a panic:
```
thread 'test_instant' panicked at 'other was less than the current instant', libstd/sys/unix/time.rs:292:17
```
But clearly, `other` was actually greater than the current instant.
2018-06-05 08:33:46 -06:00
Claudio Bley
33c4b37d00 Clarify error phrase in sub_instant function
Uses the same wording as [`src/libstd/sys/windows/time.rs`][1].

1: 95e2bf253d/src/libstd/sys/windows/time.rs (L65)
2018-06-04 08:59:09 +02:00
Nicolas Koch
2c3eff99f0 fs: copy: Add EPERM to fallback error conditions
Fixes #51266
2018-06-01 09:32:20 +02:00
Guillaume Gomez
af4acbe5e7 Rollup merge of #51213 - nicokoch:copy_permissions, r=cramertj
fs: copy: Use File::set_permissions instead of fs::set_permissions

We already got the open file descriptor at this point.
Don't make the kernel resolve the path again.
2018-05-31 22:17:14 +02:00
Claudio Bley
95e2bf253d Fix confusing error message for sub_instant
When subtracting an Instant from another, the function will panick when `RHS > self`, but the error message confusingly displays a different error:

```rust
let i = Instant::now();
let other = Instant::now();
if other > i {
    println!("{:?}", i - other);
}
```
This results in a panic:
```
thread 'test_instant' panicked at 'other was less than the current instant', libstd/sys/unix/time.rs:292:17
```
2018-05-31 22:05:36 +02:00
Guillaume Girol
8dec03b71a libstd/sys/unix/fs.rs: fix compilation on fuchsia 2018-05-31 19:18:58 +02:00
Guillaume Girol
cb2a0d61ad std::fs::DirEntry.metadata(): use fstatat instead of lstat when possible 2018-05-30 20:52:30 +02:00
Nicolas Koch
c5ee3b6df1 Remobve unused import 2018-05-30 12:09:20 +02:00
Nicolas Koch
9b6940d0b4 fs: copy: Use File::set_permissions instead of fs::set_permissions
We already got the open file descriptor at this point.
Don't make the kernel resolve the path again.
2018-05-30 06:33:54 +02:00
bors
ec99b220fe Auto merge of #50772 - nicokoch:fastcopy, r=alexcrichton
fs: copy: use copy_file_range on Linux

Linux 4.5 introduced a new system call [copy_file_range](http://man7.org/linux/man-pages/man2/copy_file_range.2.html) to copy data from one file to another.

This PR uses the new system call (if available). This has several advantages:

1. No need to constantly copy data from userspace to kernel space, if the buffer is small or the file is large
2. On some filesystems, like BTRFS, the kernel can leverage internal fs mechanisms for huge performance gains
3. Filesystems on the network dont need to copy data between the host and the client machine (they have to in the current read/write implementation)

I have created a small library that also implements the new system call for some huge performance gains here: https://github.com/nicokoch/fastcopy
Benchmark results are in the README
2018-05-29 23:49:11 +00:00
Nicolas Koch
c7d6a0130b Fix additional nits:
- compute bytes_to_copy more elegantly
  - add assert that written is 0 in fallback case
2018-05-29 23:42:42 +02:00
Nicolas Koch
3b271eb039 Use FIXME instead of TODO; Move bytes_to_copy calculation inside if
branch
2018-05-28 17:19:42 +02:00
Nicolas Koch
3f392abdfb Implement suggestions from the PR
- Move loading of atomic bool outside the loop
  - Add comment about TryFrom for future improvement
2018-05-24 14:51:59 +02:00
Nicolas Koch
09d03bc245 Store ENOSYS in a global to avoid unnecessary system calls 2018-05-17 14:10:14 +02:00
kennytm
fc6c08e799 Rollup merge of #50726 - udoprog:read2-inner-fn, r=alexcrichton
read2: Use inner function instead of closure

Very minor thing, but there doesn't appear to be a reason to use a closure here.

Generated code is identical in my tests, but I believe it's clearer that nothing from the environment is being used.
2018-05-17 05:18:06 +08:00
kennytm
d623f45a40 Rollup merge of #50638 - tbu-:pr_open_cloexec_once, r=nagisa
Don't unconditionally set CLOEXEC twice on every fd we open on Linux

Previously, every `open64` was accompanied by a `ioctl(…, FIOCLEX)`,
because some old Linux version would ignore the `O_CLOEXEC` flag we pass
to the `open64` function.

Now, we check whether the `CLOEXEC` flag is set on the first file we
open – if it is, we won't do extra syscalls for every opened file. If it
is not set, we fall back to the old behavior of unconditionally calling
`ioctl(…, FIOCLEX)` on newly opened files.

On old Linuxes, this amounts to one extra syscall per process, namely
the `fcntl(…, F_GETFD)` call to check the `CLOEXEC` flag.

On new Linuxes, this reduces the number of syscalls per opened file by
one, except for the first file, where it does the same number of
syscalls as before (`fcntl(…, F_GETFD)` to check the flag instead of
`ioctl(…, FIOCLEX)` to set it).
2018-05-16 23:22:45 +08:00
Nicolas Koch
a5e2942861 Fix large file copies on 32 bit platforms 2018-05-16 10:35:19 +02:00
Nicolas Koch
f4c2825c8f Adjust len in every iteration 2018-05-16 10:27:14 +02:00
Nicolas Koch
b605923cc8 Add clarifying comment about offset argument 2018-05-16 10:21:34 +02:00
Nicolas Koch
00ec3cf2a0 Use copy_file_range on android also 2018-05-16 10:17:06 +02:00
Nicolas Koch
834ef9f08a fs: use copy_file_range on linux 2018-05-15 15:25:09 +02:00
Tobias Bucher
6d1da82329 Don't unconditionally set CLOEXEC twice on every fd we open on Linux
Previously, every `open64` was accompanied by a `ioctl(…, FIOCLEX)`,
because some old Linux version would ignore the `O_CLOEXEC` flag we pass
to the `open64` function.

Now, we check whether the `CLOEXEC` flag is set on the first file we
open – if it is, we won't do extra syscalls for every opened file. If it
is not set, we fall back to the old behavior of unconditionally calling
`ioctl(…, FIOCLEX)` on newly opened files.

On old Linuxes, this amounts to one extra syscall per process, namely
the `fcntl(…, F_GETFD)` call to check the `CLOEXEC` flag.

On new Linuxes, this reduces the number of syscalls per opened file by
one, except for the first file, where it does the same number of
syscalls as before (`fcntl(…, F_GETFD)` to check the flag instead of
`ioctl(…, FIOCLEX)` to set it).
2018-05-14 13:20:39 +02:00
John-John Tedro
56f505e6c6 read2: Use inner function instead of closure 2018-05-14 03:23:32 +02:00
Tobias Bucher
5d015e1366 Do not silently truncate offsets for read_at/write_at on emscripten
Generate an IO error if the offset is out of bounds for the system call.
2018-05-12 08:39:05 -06:00
Martin Husemann
244e24a312 Add comments and unify guard page setup.
While currently only NetBSD seems to be affected, all systems
implementing PAX MPROTECT in strict mode need this treatment,
and it does not hurt others.
2018-05-02 10:00:33 +02:00
Martin Husemann
7c2304ddc6 Map the stack guard page with max protection on NetBSD
On NetBSD the initial mmap() protection of a mapping can not be made
less restrictive with mprotect().

So when mapping a stack guard page, use the maximum protection
we ever want to use, then mprotect() it to the permission we
want it to have initially.
2018-04-30 08:04:53 +02:00
bors
38e251ba37 Auto merge of #50079 - NickAtAccuPS:android_abstract_socket, r=sfackler
Android abstract unix domain sockets AddressKind correction

The prior check causes abstract unix domain sockets to return AddressKind::Unnamed instead of AddressKind::Abstract on Android.

Other than the immediately proceeding comment "macOS seems to return a len of 16 and a zeroed sun_path for unnamed addresses" the check as-implemented does not seem to have alternative explanation. I couldn't find an alternative explanation while stepping though git blame. I suspect the AddressKind::Unnamed nonzero check should instead be if macos, length 16, and zeroed array. @sfackler could you comment on this, the code as-is is the same from your initial addition of abstract uds support.
2018-04-24 14:15:56 +00:00
kennytm
2701c175a5 Rollup merge of #49829 - ecstatic-morse:os-docs, r=steveklabnik
Add doc links to `std::os` extension traits

Addresses a small subset of #29367.

This adds documentation links to the original type for various OS-specific extension traits, and uses a common sentence for introducing such traits (which now consistently ends in a period).
2018-04-24 11:57:03 +08:00
Nicholas Rishel
da6142c810 Rustfmt result (for relevant changes) to satisfy Travis line length check.
Signed-off-by: Nicholas Rishel <nick@accups.com>
2018-04-19 17:27:05 -04:00
Nicholas Rishel
c7f3621f0e The prior check causes abstract unix domain sockets to return unnamed on Android.
Signed-off-by: Nicholas Rishel <nick@accups.com>
2018-04-19 15:55:02 -04:00
bors
3809bbf47c Auto merge of #49488 - alexcrichton:small-wasm-panic, r=sfackler
std: Minimize size of panicking on wasm

This commit applies a few code size optimizations for the wasm target to
the standard library, namely around panics. We notably know that in most
configurations it's impossible for us to print anything in
wasm32-unknown-unknown so we can skip larger portions of panicking that
are otherwise simply informative. This allows us to get quite a nice
size reduction.

Finally we can also tweak where the allocation happens for the
`Box<Any>` that we panic with. By only allocating once unwinding starts
we can reduce the size of a panicking wasm module from 44k to 350 bytes.
2018-04-16 23:19:41 +00:00
kennytm
ccd2c403ac Rollup merge of #49606 - varkor:pipe-repair, r=alexcrichton
Prevent broken pipes causing ICEs

As the private `std::io::print_to` panics if there is an I/O error, which is used by `println!`, the compiler would ICE if one attempted to use a broken pipe (e.g. `rustc --help | false`). This introduces a new (private) macro `try_println!` which allows us to avoid this.

As a side note, it seems this macro might be useful publicly (and actually there seems to be [a crate specifically for this purpose](https://crates.io/crates/try_print/)), though that can probably be left for a future discussion.

One slight alternative approach would be to simply early exit without an error (i.e. exit code `0`), which [this comment](https://github.com/rust-lang/rust/issues/34376#issuecomment-377822526) suggests is the usual approach. I've opted not to take that approach initially, because I think it's more helpful to know when there is a broken pipe.

Fixes #34376.
2018-04-17 01:50:58 +08:00
Dylan MacKenzie
d5bee64df4 Prefer unprefixed paths for well known structs 2018-04-14 15:32:24 -07:00
Dylan MacKenzie
182d99cfd1 Add doc links to std::os extension traits
Add documentation links to the original type for various OS-specific
extension traits and normalize the language for introducing such traits.
Also, remove some outdated comments around the extension trait
definitions.
2018-04-14 15:32:24 -07:00