summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2020-05-17Disable mkfifo for RedoxXavier L'Heureux
FIFOs are not supported (yet?) by RedoxFS, so disable it
2020-05-17Remove temporarily the failing tests for RedoxXavier L'Heureux
TODO: Fix them in Relibc
2020-05-17Make sure to leave the values as-is in openXavier L'Heureux
2020-05-17Add pollXavier L'Heureux
2020-05-17Add termio supportXavier L'Heureux
2020-05-17Remove more unsupported functions and make it possible to run testsXavier L'Heureux
2020-05-17Add Redox support for most of the modulesXavier L'Heureux
Some things are not implemented yet in redox, so a lot of annotations were added to remove functions when compiling for redox. Those functions will hopefully be added in time, but for now it's better to have partial support than none. Blocked by https://github.com/rust-lang/libc/pull/1438
2020-05-17Replace void crate with Rust standard lib Infallible typeOssi Herrala
std::convert::Infallible has been available since Rust 1.34 and nix currently targets Rust 1.36 or later so this should not cause problems. Fixes #1238
2020-05-17Merge #1242bors[bot]
1242: Don't implement `NixPath` for `Option<&P> where P: NixPath` r=asomers a=asomers Most Nix functions that accept `NixPath` arguments can't do anything useful with `None`. The exceptions (`mount` and `quotactl_sync`) already take explicitly optional arguments. Also, this changes the behavior of `mount` with `None` arguments. Previously, it would call mount(2) with empty strings for those arguments. Now, it will use null pointers. Co-authored-by: Alan Somers <asomers@gmail.com>
2020-05-17Merge #1245bors[bot]
1245: Make ptrace::write unsafe on Linux r=asomers a=asomers It always should've been unsafe, because it dereferences a user-provided pointer. Co-authored-by: Alan Somers <asomers@gmail.com>
2020-05-16Make ptrace::write unsafe on LinuxAlan Somers
It always should've been unsafe, because it dereferences a user-provided pointer.
2020-05-16Apply `repr(transparent)` to several FFI typesAlan Somers
repr(transparent) is required in order to safely cast between an FFI type and its NewType. This commit applies that attribute to PollFd, EpollEvent, IpMembershipRequest, Ipv6MembershipRequest, TimeVal, and IoVec. Fixes #1241
2020-05-16Don't implement `NixPath` for `Option<&P> where P: NixPath`Alan Somers
Most Nix functions that accept `NixPath` arguments can't do anything useful with `None`. The exceptions (`mount` and `quotactl_sync`) already take explicitly optional arguments. Also, this changes the behavior of `mount` with `None` arguments. Previously, it would call mount(2) with empty strings for those arguments. Now, it will use null pointers.
2020-05-15Document additional OS-specific flags for pipe2Harm Berntsen
See https://netbsd.gw.com/cgi-bin/man-cgi?pipe2+2+NetBSD-current and http://man7.org/linux/man-pages/man2/pipe.2.html
2020-05-12Merge #1231bors[bot]
1231: Add support for reading symlinks longer than `PATH_MAX` to `readlink` and `readlinkat` r=asomers a=SolraBizna This is in response to issue #1178. The new logic uses the following approach. - At any time, if `readlink` returns an error, or a value ≥ 0 and < (not ≤!) the buffer size, we're done. - Attempt to `readlink` into a `PATH_MAX` sized buffer. (This will almost always succeed, and saves a system call over calling `lstat` first.) - Try to `lstat` the link. If it succeeds and returns a sane value, allocate the buffer to be that large plus one byte. Otherwise, allocate the buffer to be `PATH_MAX.max(128) << 1` bytes. - Repeatedly attempt to `readlink`. Any time its result is ≥ (not >!) the buffer size, double the buffer size and try again. While testing this, I discovered that ext4 doesn't allow creation of a symlink > 4095 (Linux's `PATH_MAX` minus one) bytes long. This is in spite of Linux happily allowing paths in other contexts to be longer than this—including on ext4! This was probably instated to avoid breaking programs that assume `PATH_MAX` will always be enough, but ironically hindered my attempt to test support for *not* assuming. I tested the code using an artificially small `PATH_MAX` and (separately) a wired-to-fail `lstat`. `strace` showed the code behaving precisely as expected. Unfortunately, I can't add an automatic test for this. Other changes made by this PR: - `wrap_readlink_result` now calls `shrink_to_fit` on the buffer before returning, potentially reclaiming kilobytes of memory per call. This could be very important if the returned buffer is long-lived. - `readlink` and `readlink_at` now both call an `inner_readlink` function that contains the bulk of the logic, avoiding copy-pasting of code. (This is much more important now that the logic is more than a few lines long.) Notably, this PR does *not* add support for systems that don't define `PATH_MAX` at all. As far as I know, I don't have access to any POSIX-ish OS that doesn't have `PATH_MAX`, and I suspect it would have other compatibility issues with `nix` anyway. Co-authored-by: Solra Bizna <solra@bizna.name>
2020-05-10Add support for reading symlinks longer than `PATH_MAX` to `readlink` and ↵Solra Bizna
`readlinkat`
2020-05-08Add SO_BINDTODEVICE sockoptJean Pierre Dudey
This is available only on Linux as far I know, [socket(7)](https://linux.die.net/man/7/socket) has some information about the `SO_BINDTODEVICE` sockopt. In simple words it binds a socket to an specific network device (specified as an string like "wlo1", "eth0", etc.), to only process packets from that device. Signed-off-by: Jean Pierre Dudey <jeandudey@hotmail.com>
2020-05-02Add UnixCredentials support on FreeBSD/DragonFly (cmsgcred/SCM_CREDS)Greg V
2020-05-01Merge #1215bors[bot]
1215: Remove sys::socket::addr::from_libc_sockaddr from the public API r=posborne a=asomers This function never should've been public, since it's basically impossible to use directly. It's only public due to an oversight from PR #667 . Co-authored-by: Alan Somers <asomers@gmail.com>
2020-04-26Eliminate a mem::zeroed() in recvmmsgAlan Somers
2020-04-26Support sendmmsg/recvmmsgGleb Pomykalov
2020-04-25Merge #1209bors[bot]
1209: Support UDP GSO and GRO on linux r=asomers a=glebpom This PR implements support for UDP GSO and GRO on Linux. It provides the way to send/receive UDP payloads bigger than interface MTU. The goal is to improve UDP performance. GSO was introduced in Linux 4.18, GRO in 5.3 Co-authored-by: Gleb Pomykalov <gleb@lancastr.com>
2020-04-25Merge #1221bors[bot]
1221: Fix compilation on DragonFly (statfs) r=asomers a=mneumann Co-authored-by: Michael Neumann <mneumann@ntecs.de>
2020-04-25Support UDP GSO and GRO on linuxGleb Pomykalov
2020-04-25Fix compilation on DragonFly (statfs)Michael Neumann
2020-04-25Fix RISC-V supportAndreas Schwab
Don't try to use PTRACE_[GS]ETREGS, PTRACE_[GS]ETFPREGS or PTRACE_[GS]ETFPXREGS on riscv64, they are legacy-only.
2020-04-24Merge #1210bors[bot]
1210: impl io::{Read,Write} for PtyMaster r=asomers a=cuviper `PtyMaster` acts like an owned file descriptor, even closing on `Drop`. Implementing `io::Read` and `io::Write` lets it be used directly in standard I/O operations. Co-authored-by: Josh Stone <jistone@redhat.com>
2020-04-22Merge #1211bors[bot]
1211: Feature/hugepage size r=asomers a=GuillaumeDIDIER Should solve #1194 . Co-authored-by: GuillaumeDIDIER <guillaume.didier95@hotmail.fr>
2020-04-21impl io::{Read,Write} for PtyMasterJosh Stone
`PtyMaster` acts like an owned file descriptor, even closing on `Drop`. Implementing `io::Read` and `io::Write` lets it be used directly in standard I/O operations.
2020-04-21Add the MAP_HUGE_<SIZE> flags for linux.GuillaumeDIDIER
Closes #1194 Use git libc for development (Remember to reset this to released version for the next nix release, once libc has released >=0.2.69)
2020-04-19Merge #1207bors[bot]
1207: Add select::FdSet::fds() method r=asomers a=zombiezen To be more consistent with most Rust APIs and enable cloning of the iterator, I made `FdSet::contains` operate on an immutable borrow instead of a mutable one by copying the set. If this is not desirable, I can roll that back from this PR and focus purely on the `fds()` method. Co-authored-by: Ross Light <ross@zombiezen.com>
2020-04-19Merge #1206bors[bot]
1206: Fix unaligned casting of cmsg data to af_alg_iv r=asomers a=glebpom Casting a pointer to `cmsg_data` to `af_alg_iv` is incorrect since it's not properly aligned. As of the [`cmsg` man page](http://man7.org/linux/man-pages/man3/cmsg.3.html) "Applications should not cast it to a pointer type matching the payload, but should instead use memcpy(3) to copy data to or from a suitably declared object." Co-authored-by: Gleb Pomykalov <gleb@lancastr.com>
2020-04-14Added fds testRoss Light
2020-04-14Add space to doc comment of fdsRoss Light
2020-04-13Operate on &mutRoss Light
2020-04-12Remove sys::socket::addr::from_libc_sockaddr from the public APIAlan Somers
This function never should've been public, since it's basically impossible to use directly. It's only public due to an oversight from PR #667 .
2020-04-12Fix UB in getsockoptAlan Somers
The old code tried to zero-initialize an enum for which 0 is not a valid value. That worked for older compilers, but triggers a panic with Rust 1.44.0. The correct technique is to use mem::MaybeUninit. Fixes #1212
2020-04-11Remove unnecessary fn main wrapper in exampleRoss Light
2020-04-08Fix unaligned castting of cmsg data to af_alg_ivGleb Pomykalov
2020-04-08Merge #1195bors[bot]
1195: Implement open file descriptor locks in fcntl r=asomers a=andrenth Hello This PR updates libc to 0.2.68, which adds the `F_OFD_*` fcntl commands, and uses them in `nix::fcntl::fcntl`. Co-authored-by: Andre Nathan <andre@digirati.com.br>
2020-04-07Add select::FdSet::fds() methodRoss Light
2020-04-06unistd: avoid infinite loop caused by reserve_double_buffer_sizeSteven Danna
Functions such as Group::from_anything use reserve_double_buffer_size in a loop, expecting it to return ERANGE if the passed limit is reached. However, the returned vector is passed as pointer to a libc function that writes data into memory and doesn't update the length of the Vec. Because of this, the previous code would never return ERANGE and the calling loops would never exit if they hit a case where the required buffer was larger than the maximum buffer. This fixes the problem by checking the capacity rather than the length. Signed-off-by: Steven Danna <steve@chef.io>
2020-04-02Enable getregs/setregs on muslcoord.e
Update CHANGELOG for #1198
2020-03-28Fix fallocate return typeDiana
Untested, done on github. Fixes #1200
2020-03-17Handle open file descriptor locks in fcntlAndre Nathan
2020-03-08Fix a lint on Rust nightly 1.43.0Alan Somers
2020-03-03Derive `Ord`, `PartialOrd` for `Pid`Joe Ranweiler
2020-02-29add setfsuid and setfsgid implementation for filesystem checksMarco Conte
2020-02-13Make FsType's raw type publicMikail Bagishov
2020-02-11Provide clearenv()John Gallagher