All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Add
getregset()/setregset()
for Linux/glibc/x86/x86_64/aarch64/riscv64 andgetregs()/setregs()
for Linux/glibc/aarch64/riscv64 (#2044) - Add socket option Ipv6Ttl for apple targets. (#2287)
- Add socket option UtunIfname. (#2325)
- make SigAction repr(transparent) & can be converted to the libc raw type (#2326)
- Add
From
trait implementation for conversions betweensockaddr_in
andSockaddrIn
,sockaddr_in6
andSockaddrIn6
(#2328) - Add socket option ReusePortLb for FreeBSD. (#2332)
- Added support for openat2 on linux. (#2339)
- Add if_indextoname function. (#2340)
- Add
mount
andunmount
API for apple targets. (#2347) - Added
_PC_MIN_HOLE_SIZE
forpathconf
andfpathconf
. (#2349) - Added
impl AsFd for pty::PtyMaster
(#2355) - Add
open
flagO_SEARCH
to AIX, Empscripten, FreeBSD, Fuchsia, solarish, WASI (#2374) - Add prctl function
prctl_set_vma_anon_name
for Linux/Android. (#2378) - Add
sync(2)
forapple_targets/solarish/haiku/aix/hurd
,syncfs(2)
forhurd
andfdatasync(2)
foraix/hurd
(#2379) - Add fdatasync support for Apple targets. (#2380)
- Add
fcntl::OFlag::O_PATH
for FreeBSD and Fuchsia (#2382) - Added
PathconfVar::MIN_HOLE_SIZE
for apple_targets. (#2388) - Add
open
flagO_SEARCH
to apple_targets (#2391) O_DSYNC
may now be used withaio_fsync
andfcntl
on FreeBSD. (#2404)- Added
Flock::relock
for upgrading and downgrading locks. (#2407)
-
Change the
ForkptyResult
type to the following repr so that the uninitializedmaster
field won't be accessed in the child process:pub enum ForkptyResult { Parent { child: Pid, master: OwnedFd, }, Child, } ``` ([#2315](https://github.com/nix-rust/nix/pull/2315))
-
Updated
cfg_aliases
dependency from version 0.1 to 0.2 (#2322) -
Change the signature of
ptrace::write
andptrace::write_user
to make them safe (#2324) -
Allow use of
SignalFd
through shared referenceLike with many other file descriptors, concurrent use of signalfds is safe. Changing the signal mask of and reading signals from a signalfd can now be done with the
SignalFd
API even if other references to it exist. (#2367) -
Changed tee, splice and vmsplice RawFd arguments to AsFd. (#2387)
-
Added I/O safety to the sys/aio module. Most functions that previously accepted a
AsRawFd
argument now accept anAsFd
instead. (#2401) -
RecvMsg::cmsgs()
now returns aResult
, and checks that cmsgs were not truncated. (#2413)
- No longer panics when the
fanotify
queue overflows. (#2399) - Fixed ControlMessageOwned::UdpGroSegments wrapped type from u16 to i32 to reflect the used kernel's one. (#2406)
-
Added
mkdtemp
wrapper (#1297) -
Add associated constants
UTIME_OMIT
UTIME_NOW
forTimeSpec
(#1879) -
Added
EventFd
type. (#1945) -
- Added
impl From<Signal> for SigSet
. - Added
impl std::ops::BitOr for SigSet
. - Added
impl std::ops::BitOr for Signal
. - Added
impl std::ops::BitOr<Signal> for SigSet
(#1959)
- Added
-
Added
TlsGetRecordType
control message type and corresponding enum for linux (#2065) -
Added
Ipv6HopLimit
to::nix::sys::socket::ControlMessage
for Linux, MacOS, FreeBSD, DragonflyBSD, Android, iOS and Haiku. (#2074) -
Added
Icmp
andIcmpV6
toSockProtocol
(#2103) -
Added rfork support for FreeBSD in
unistd
(#2121) -
Added
MapFlags::map_hugetlb_with_size_log2
method for Linux targets (#2125) -
Added
mmap_anonymous
function (#2127) -
Added
mips32r6
andmips64r6
support for signal, ioctl and ptrace (#2138) -
Added
F_GETPATH
FcntlFlags entry on Apple/NetBSD/DragonflyBSD for::nix::fcntl
. (#2142) -
Added
F_KINFO
FcntlFlags entry on FreeBSD for::nix::fcntl
. (#2152) -
Added
F_GETPATH_NOFIRMLINK
andF_BARRIERFSYNC
FcntlFlags entry on Apple for::nix::fcntl
. (#2155) -
Added newtype
Flock
to automatically unlock a held flock upon drop. AddedFlockable
trait to represent valid types forFlock
. (#2170) -
Added
SetSockOpt
impls to enable Linux Kernel TLS on a TCP socket and to import TLS parameters. (#2175) -
- Added the
::nix::sys::socket::SocketTimestamp
enum for configuring theTsClock
(a.k.aSO_TS_CLOCK
) sockopt - Added FreeBSD's
ScmRealtime
andScmMonotonic
as new options in::nix::sys::socket::ControlMessageOwned
(#2187)
- Added the
-
Added new fanotify API: wrappers for
fanotify_init
andfanotify_mark
(#2194) -
Added
SpecialCharacterindices
support for haiku. (#2195) -
Added
sys::sendfile
support for solaris/illumos. (#2198) -
impl Display for InterfaceFlags (#2206)
-
Added
sendfilev
in sys::sendfile for solarish (#2207) -
Added
fctrl::SealFlag::F_SEAL_FUTURE_WRITE
(#2213) -
Added
Ipv6MulticastHops
as socket option to set and read. (#2234) -
Enable
ControlMessageOwned::Ipv4RecvIf
andControlMessageOwned::Ipv4RecvDstAddr
for DragonFlyBSD (#2240) -
ClockId::set_time()
andtime::clock_settime()
are now enabled on macOS (#2241) -
Added
IpBindAddressNoPort
sockopt to supportIP_BIND_ADDRESS_NO_PORT
available on linux. (#2244) -
Enable
MapFlags::map_hugetlb_with_size_log2
method for Android/Fuchsia (#2245) -
Added
TcpFastOpenConnect
sockopt to supportTCP_FASTOPEN_CONNECT
available on linux. (#2247) -
Add
reboot(2)
for OpenBSD/NetBSD (#2251) -
Added new
MemFdCreateFlag
constants tosys::memfd
on Linux and Android related to hugetlbfs support. (#2252) -
Expose the inner fd of
Kqueue
through:- impl AsFd for Kqueue
- impl From<Kqueue> for OwnedFd
(#2258)
-
Added
sys::eventfd
support on FreeBSD (#2259) -
Added
MmapFlags::MAP_FIXED
constant insys::mman
for netbsd and openbsd (#2260) -
Added the
SO_LISTENQLIMIT
sockopt. (#2263) -
Enable the
AT_EMPTY_PATH
flag for thefchownat()
function (#2267) -
Add
AtFlags::AT_EMPTY_PATH
for FreeBSD and Hurd (#2270) -
Enable `OFlag::O_DIRECTORY for Solarish (#2275)
-
Added the
Backlog
wrapper type for thelisten
call. (#2276) -
Add
clock_nanosleep()
(#2277) -
Enabled
O_DIRECT
infcntl::OFlags
for solarish (#2278) -
Added a new API sigsuspend. (#2279)
-
- Added
errno::Errno::set
function - Added
errno::Errno::set_raw
function - Added
errno::Errno::last_raw
function - Added
errno::Errno::from_raw
function
(#2283)
- Added
-
Enable the
AT_EMPTY_PATH
flag for thelinkat()
function (#2284) -
Enable unistd::{sync, syncfs} for Android (#2296)
-
poll
now takesPollTimeout
replacinglibc::c_int
. (#1876) -
Deprecated
sys::eventfd::eventfd
. (#1945) -
mmap
,mmap_anonymous
,munmap
,mremap
,madvise
,msync
,mprotect
,munlock
andmlock
updated to useNonNull
. (#2000) -
mmap
function now acceptsF
instead ofOption<F>
(#2127) -
PollFd::new
now takes aBorrowedFd
argument, with relaxed lifetime requirements relative to the previous version. (#2134) -
FdSet::{insert, remove, contains}
now takeBorrowedFd
arguments, and have relaxed lifetime requirements relative to 0.27.1. (#2136) -
The following APIs now take an implementation of
AsFd
rather than aRawFd
:unistd::tcgetpgrp
unistd::tcsetpgrp
unistd::fpathconf
unistd::ttyname
unistd::getpeereid
(#2137)
-
Changed
openat()
andDir::openat()
, now take optionaldirfd
s (#2139) -
The MSRV is now 1.69 (#2144)
-
Changed function
SockaddrIn::ip()
to returnnet::Ipv4Addr
and refactoredSocketAddrV6::ip()
to beconst
(#2151) -
The following APIs now take optional
dirfd
s:readlinkat()
fstatat()
mknodat()
mkdirat()
execveat()
(#2157)
-
Epoll::wait
now takesEpollTimeout
replacingisize
. (#2202) -
- Deprecated
errno::errno()
function (useErrno::last_raw()
) - Deprecated
errno::from_i32()
function (useErrno::from_raw()
) - Deprecated
errno::Errno::from_i32()
function (useErrno::from_raw()
)
(#2283)
- Deprecated
- Fix
SigSet
incorrect implementation ofEq
,PartialEq
andHash
(#1946) - Fixed
::sys::socket::sockopt::IpMulticastTtl
by fixing the value of optlen passed tolibc::setsockopt
and added tests. (#2072) - Fixed the function signature of
recvmmsg
, potentially causing UB (#2119) - Fix
SignalFd::set_mask
. In 0.27.0 it would actually close the file descriptor. (#2141) - Fixed UnixAddr::new for haiku, it did not record the
sun_len
value as needed. Fixedsys::socket::addr::from_raw_parts
andsys::socket::Sockaddrlike::len
build for solaris. (#2242) - Fixed solaris build globally. (#2248)
- Changed the
dup3
wrapper to perform a real call todup3
instead of emulating it viadup2
andfcntl
to get rid of race condition (#2268) - Fixed
::unistd::Group::members
using read_unaligned to avoid crash on misaligned pointers (#2311)
- The
FchownatFlags
type has been deprecated, please useAtFlags
instead. (#2267) - Removed the
dup3
wrapper on macOS, which was emulated viadup2
andfcntl
and could cause a race condition. Thedup3
system call is not supported on macOS. (#2268) - The
LinkatFlags
type has been deprecated, please useAtFlags
instead. (#2284)
- Fixed generating the documentation on docs.rs. (#2111)
- Added
AT_EACCESS
toAtFlags
on all platforms but android (#1995) - Add
PF_ROUTE
toSockType
on macOS, iOS, all of the BSDs, Fuchsia, Haiku, Illumos. (#1867) - Added
nix::ucontext
module onaarch64-unknown-linux-gnu
. (#1662) - Added
CanRaw
toSockProtocol
andCanBcm
as a separateSocProtocol
constant. (#1912) - Added
Generic
andNFLOG
toSockProtocol
. (#2092) - Added
mq_timedreceive
to::nix::mqueue
. ([#1966])(nix-rust#1966) - Added
LocalPeerPid
tonix::sys::socket::sockopt
for macOS. (#1967) - Added
TFD_TIMER_CANCEL_ON_SET
to::nix::sys::time::TimerSetTimeFlags
on Linux and Android. (#2040) - Added
SOF_TIMESTAMPING_OPT_ID
andSOF_TIMESTAMPING_OPT_TSONLY
tonix::sys::socket::TimestampingFlag
. (#2048) - Enabled socket timestamping options on Android. (#2077)
- Added vsock support for macOS (#2056)
- Added
SO_SETFIB
andSO_USER_COOKIE
tonix::sys::socket::sockopt
for FreeBSD. (#2085) - Added
SO_RTABLE
for OpenBSD andSO_ACCEPTFILTER
for FreeBSD/NetBSD tonix::sys::socket::sockopt
. (#2085) - Added
MSG_WAITFORONE
toMsgFlags
on Android, Fuchsia, Linux, NetBSD, FreeBSD, OpenBSD, and Solaris. (#2014) - Added
SO_TS_CLOCK
for FreeBSD tonix::sys::socket::sockopt
. (#2093) - Added support for prctl in Linux. (#1550)
nix::socket
andnix::select
are now available on Redox. (#2012)- Implemented AsFd, AsRawFd, FromRawFd, and IntoRawFd for
mqueue::MqdT
. (#2097) - Add the ability to set
kevent_flags
onSigEvent
. (#1731)
-
All Cargo features have been removed from the default set. Users will need to specify which features they depend on in their Cargo.toml. (#2091)
-
Implemented I/O safety for many, but not all, of Nix's APIs. Many public functions argument and return types have changed:
Original Type New Type AsRawFd AsFd RawFd BorrowedFd or OwnedFd (#1906)
-
Use I/O safety with
copy_file_range
, and expose it on FreeBSD. (#1906) -
The epoll interface now uses a type. (#1882)
-
With I/O-safe type applied in
pty::OpenptyResult
andpty::ForkptyResult
, users no longer need to manually close the file descriptors in these types. (#1921) -
Refactored
name
parameter ofmq_open
andmq_unlink
to be generic overNixPath
. (#2102). -
Made
clone
unsafe, likefork
. (#1993)
sys::event::{kevent, kevent_ts}
are deprecated in favor ofsys::kevent::Kqueue::kevent
, andsys::event::kqueue
is deprecated in favor ofsys::kevent::Kqueue::new
. (#1943)- Removed deprecated IoVec API. (#1855)
- Removed deprecated net APIs. (#1861)
nix::sys::signalfd::signalfd
is deprecated. Usenix::sys::signalfd::SignalFd
instead. (#1938)- Removed
SigEvent
support on Fuchsia, where it was unsound. (#2079) - Removed
flock
from::nix::fcntl
on Solaris. (#2082)
- Fix: send
ETH_P_ALL
in htons format (#1925) - Fix:
recvmsg
now sets the length of the receivedsockaddr_un
field correctly on Linux platforms. (#2041) - Fix potentially invalid conversions in
SockaddrIn::from<std::net::SocketAddrV4>
,SockaddrIn6::from<std::net::SockaddrV6>
,IpMembershipRequest::new
, andIpv6MembershipRequest::new
with future Rust versions. (#2061) - Fixed an incorrect lifetime returned from
recvmsg
. (#2095)
- Fix
SockaddrIn6
bug that was swappingflowinfo
andscope_id
byte ordering. (#1964)
- Fix UB with
sys::socket::sockopt::SockType
usingSOCK_PACKET
. (#1821)
- Added
SockaddrStorage::{as_unix_addr, as_unix_addr_mut}
(#1871) - Added
MntFlags
andunmount
on all of the BSDs. - Added
any()
andall()
topoll::PollFd
. (#1877) - Add
MntFlags
andunmount
on all of the BSDs. (#1849) - Added a
Statfs::flags
method. (#1849) - Added
NSFS_MAGIC
FsType on Linux and Android. (#1829) - Added
sched_getcpu
on platforms that support it. (#1825) - Added
sched_getaffinity
andsched_setaffinity
on FreeBSD. (#1804) - Added
line_discipline
field toTermios
on Linux, Android and Haiku (#1805) - Expose the memfd module on FreeBSD (memfd was added in FreeBSD 13) (#1808)
- Added
domainname
field ofUtsName
on Android and Linux (#1817) - Re-export
RLIM_INFINITY
fromlibc
(#1831) - Added
syncfs(2)
on Linux (#1833) - Added
faccessat(2)
on illumos (#1841) - Added
eaccess()
on FreeBSD, DragonFly and Linux (glibc and musl). (#1842) - Added
IP_TOS
SO_PRIORITY
andIPV6_TCLASS
sockopts for Linux (#1853) - Added
new_unnamed
andis_unnamed
forUnixAddr
on Linux and Android. (#1857) - Added
SockProtocol::Raw
for raw sockets (#1848) - added
IP_MTU
(IpMtu
)IPPROTO_IP
sockopt on Linux and Android. (#1865)
- The MSRV is now 1.56.1 (#1792)
- The
addr
argument ofsys::mman::mmap
is now of typeOption<NonZeroUsize>
. (#1870) - The
length
argument ofsys::mman::mmap
is now of typeNonZeroUsize
. (#1873)
- Fixed using
SockaddrStorage
to store a Unix-domain socket address on Linux. (#1871) - Fix microsecond calculation for
TimeSpec
. (#1801) - Fix
User::from_name
andGroup::from_name
panicking when given a name containing a nul. (#1815) - Fix
User::from_uid
andUser::from_name
crash on Android platform. (#1824) - Workaround XNU bug causing netmasks returned by
getifaddrs
to misbehave. (#1788)
- Removed deprecated error constants and conversions. (#1860)
- Added
faccessat
(#1780) - Added
memfd
on Android. (#1773) - Added
ETH_P_ALL
toSockProtocol
enum (#1768) - Added four non-standard Linux
SysconfVar
variants (#1761) - Added const constructors for
TimeSpec
andTimeVal
(#1760) - Added
chflags
. (#1758) - Added
aio_writev
andaio_readv
. (#1713) - impl
From<uid_t>
forUid
andFrom<gid_t>
forGid
(#1727) - impl
From<SockaddrIn>
forstd::net::SocketAddrV4
and implFrom<SockaddrIn6>
forstd::net::SocketAddrV6
. (#1711) - Added support for the
x86_64-unknown-haiku
target. (#1703) - Added
ptrace::read_user
andptrace::write_user
for Linux. (#1697) - Added
getrusage
and helper typesUsageWho
andUsage
(#1747) - Added the
DontRoute
SockOpt (#1752) - Added
signal::SigSet::from_sigset_t_unchecked()
. (#1741) - Added the
Ipv4OrigDstAddr
sockopt and control message. (#1772) - Added the
Ipv6OrigDstAddr
sockopt and control message. (#1772) - Added the
Ipv4SendSrcAddr
control message. (#1776)
-
Reimplemented sendmmsg/recvmmsg to avoid allocations and with better API (#1744)
-
Rewrote the aio module. The new module:
- Does more type checking at compile time rather than runtime.
- Gives the caller control over whether and when to
Box
an aio operation. - Changes the type of the
priority
arguments toi32
. - Changes the return type of
aio_return
tousize
. (#1713)
-
nix::poll::ppoll
:sigmask
parameter is now optional. (#1739) -
Changed
gethostname
to return an ownedOsString
. (#1745) -
signal:SigSet
is now marked asrepr(transparent)
. (#1741)
- Removed support for resubmitting partially complete
lio_listio
operations. It was too complicated, and didn't fit Nix's theme of zero-cost abstractions. Instead, it can be reimplemented downstream. (#1713)
- Fixed buffer overflow in
nix::sys::socket::recvfrom
. (#1763) - Enabled
SockaddrStorage::{as_link_addr, as_link_addr_mut}
for Linux-like operating systems. (#1729) - Fixed
SockaddrLike::from_raw
implementations forVsockAddr
andSysControlAddr
. (#1736)
- Fixed
UnixAddr::size
on Linux-based OSes. (#1702)
- Added fine-grained features flags. Most Nix functionality can now be conditionally enabled. By default, all features are enabled. (#1611)
- Added statfs FS type magic constants for
target_os = "android"
and synced constants with libc v0.2.121. (#1690) - Added
fexecve
on DragonFly. (#1577) sys::uio::IoVec
is nowSend
andSync
(#1582)- Added
EPOLLEXCLUSIVE
on Android. (#1567) - Added
fdatasync
for FreeBSD, Fuchsia, NetBSD, and OpenBSD. (#1581) - Added
sched_setaffinity
andsched_getaffinity
on DragonFly. (#1537) - Added
posix_fallocate
on DragonFly. (#1621) - Added
SO_TIMESTAMPING
support (#1547) - Added getter methods to
MqAttr
struct (#1619) - Added the
TxTime
sockopt and control message. (#1564) - Added POSIX per-process timer support (#1622)
- Added
sendfile
on DragonFly. (#1615) - Added
UMOUNT_NOFOLLOW
,FUSE_SUPER_MAGIC
on Linux. (#1634) - Added
getresuid
,setresuid
,getresgid
, andsetresgid
on DragonFly, FreeBSD, and OpenBSD. (#1628) - Added
MAP_FIXED_NOREPLACE
on Linux. (#1636) - Added
fspacectl
on FreeBSD (#1640) - Added
accept4
on DragonFly, Emscripten, Fuchsia, Illumos, and NetBSD. (#1654) - Added
AsRawFd
implementation onOwningIter
. (#1563) - Added
process_vm_readv
andprocess_vm_writev
on Android. (#1557) - Added
nix::ucontext
module on s390x. (#1662) - Implemented
Extend
,FromIterator
, andIntoIterator
forSigSet
and addedSigSet::iter
andSigSetIter
. (#1553) - Added
ENOTRECOVERABLE
andEOWNERDEAD
error codes on DragonFly. (#1665) - Implemented
Read
andWrite
for&PtyMaster
(#1664) - Added
MSG_NOSIGNAL
for Android, Dragonfly, FreeBSD, Fuchsia, Haiku, Illumos, Linux, NetBSD, OpenBSD and Solaris. (#1670) - Added
waitid
. (#1584) - Added
Ipv6DontFrag
for android, iOS, linux and macOS. - Added
IpDontFrag
for iOS, macOS. (#1692)
mqueue
functions now operate on a distinct type,nix::mqueue::MqdT
. Accessors take this type by reference, not by value. (#1639)- Removed
SigSet::extend
in favor of<SigSet as Extend<Signal>>::extend
. Because of this change, you now needuse std::iter::Extend
to callextend
on aSigSet
. (#1553) - Removed the the
PATH_MAX
restriction from APIs accepting paths. Paths will now be allocated on the heap if they are too long. In addition, large instruction count improvements (~30x) were made to path handling. (#1656) - Changed
getrlimit
andsetrlimit
to userlim_t
directly instead ofOption<rlim_t>
. (#1668) - Deprecated
InetAddr
andSockAddr
in favor ofSockaddrIn
,SockaddrIn6
, andSockaddrStorage
. (#1684) - Deprecated
IpAddr
,Ipv4Addr
, andIpv6Addr
in favor of their equivalents from the standard library. (#1685) uname
now returns aResult<UtsName>
instead of just aUtsName
and ignoring failures from libc. And getters on theUtsName
struct now return an&OsStr
instead of&str
. (#1672)- Replaced
IoVec
withIoSlice
andIoSliceMut
, and replacedIoVec::from_slice
withIoSlice::new
. (#1643)
InetAddr::from_std
now sets thesin_len
/sin6_len
fields on the BSDs. (#1642)- Fixed a panic in
LinkAddr::addr
. That function now returns anOption
. (#1675) (#1677)
- Removed public access to the inner fields of
NetlinkAddr
,AlgAddr
,SysControlAddr
,LinkAddr
, andVsockAddr
. (#1614) - Removed
EventFlag::EV_SYSFLAG
. (#1635)
- Relaxed the bitflags requirement from 1.3.1 to 1.1. This partially reverts #1492. From now on, the MSRV is not guaranteed to work with all versions of all dependencies, just with some version of all dependencies. (#1607)
- Fixed soundness issues in
FdSet::insert
,FdSet::remove
, andFdSet::contains
involving file descriptors outside of the range0..FD_SETSIZE
. (#1575)
- Added the
LocalPeerCred
sockopt. (#1482) - Added
TimeSpec::from_duration
andTimeSpec::from_timespec
(#1465) - Added
IPV6_V6ONLY
sockopt. (#1470) - Added
impl From<User> for libc::passwd
trait implementation to convert aUser
into alibc::passwd
. Consumes theUser
struct to give ownership over the member pointers. (#1471) - Added
pthread_kill
. (#1472) - Added
mknodat
. (#1473) - Added
setrlimit
andgetrlimit
. (#1302) - Added
ptrace::interrupt
method for platforms that supportPTRACE_INTERRUPT
(#1422) - Added
IP6T_SO_ORIGINAL_DST
sockopt. (#1490) - Added the
PTRACE_EVENT_STOP
variant to thesys::ptrace::Event
enum (#1335) - Exposed
SockAddr::from_raw_sockaddr
(#1447) - Added
TcpRepair
(#1503) - Enabled
pwritev
andpreadv
for more operating systems. (#1511) - Added support for
TCP_MAXSEG
TCP Maximum Segment Size socket options (#1292) - Added
Ipv4RecvErr
andIpv6RecvErr
sockopts and associated control messages. (#1514) - Added
AsRawFd
implementation onPollFd
. (#1516) - Added
Ipv4Ttl
andIpv6Ttl
sockopts. (#1515) - Added
MAP_EXCL
,MAP_ALIGNED_SUPER
, andMAP_CONCEAL
mmap flags, and exposedMAP_ANONYMOUS
for all operating systems. (#1522) (#1525) (#1531) (#1534) - Added read/write accessors for 'events' on
PollFd
. (#1517)
FdSet::{contains, highest, fds}
no longer require a mutable reference. (#1464)User::gecos
and correspondinglibc::passwd::pw_gecos
are supported on 64-bit Android, change conditional compilation to include the field in 64-bit Android builds (#1471)eventfd
s are supported on Android, change conditional compilation to includesys::eventfd::eventfd
andsys::eventfd::EfdFlags
for Android builds. (#1481)- Most enums that come from C, for example
Errno
, are now marked as#[non_exhaustive]
. (#1474) - Many more functions, mostly contructors, are now
const
. (#1476) (#1492) sys::event::KEvent::filter
now returns aResult
instead of being infalliable. The only cases where it will now return an error are cases where it previously would've had undefined behavior. (#1484)- Minimum supported Rust version is now 1.46.0. (#1492)
- Rework
UnixAddr
to encapsulate internals better in order to fix soundness issues. No longer allows creating aUnixAddr
from a rawsockaddr_un
. (#1496) - Raised bitflags to 1.3.0 and the MSRV to 1.46.0. (#1492)
posix_fadvise
now returns errors in the conventional way, rather than as a non-zero value inOk()
. (#1538)- Added more errno definitions for better backwards compatibility with Nix 0.21.0. (#1467)
- Fixed potential undefined behavior in
Signal::try_from
on some platforms. (#1484) - Fixed buffer overflow in
unistd::getgrouplist
. (#1545)
- Removed a couple of termios constants on redox that were never actually supported. (#1483)
- Removed
nix::sys::signal::NSIG
. It was of dubious utility, and not correct for all platforms. (#1484) - Removed support for 32-bit Apple targets, since they've been dropped by both Rustc and Xcode. (#1492)
- Deprecated
SockAddr/InetAddr::to_str
in favor ofToString::to_string
(#1495) - Removed
SigevNotify
on OpenBSD and Redox. (#1511)
- Relaxed the bitflags requirement from 1.3.1 to 1.1. This partially reverts #1492. From now on, the MSRV is not guaranteed to work with all versions of all dependencies, just with some version of all dependencies. (#1607)
- Fixed buffer overflow in
unistd::getgrouplist
. (#1545) - Added more errno definitions for better backwards compatibility with Nix 0.21.0. (#1467)
- Locked bitflags to < 1.3.0 to fix the build with rust < 1.46.0.
- Removed a couple of termios constants on redox that were never actually supported. (#1483)
- Added
if_nameindex
(#1445) - Added
nmount
for FreeBSD. (#1453) - Added
IpFreebind
socket option (sockopt) on Linux, Fuchsia and Android. (#1456) - Added
TcpUserTimeout
socket option (sockopt) on Linux and Fuchsia. (#1457) - Added
renameat2
for Linux (#1458) - Added
RxqOvfl
support on Linux, Fuchsia and Android. (#1455)
ptsname_r
now returns a lossily-converted string in the event of bad UTF, just likeptsname
. (#1446)- Nix's error type is now a simple wrapper around the platform's Errno. This
means it is now
Into<std::io::Error>
. It's alsoClone
,Copy
,Eq
, and has a small fixed size. It also requires less typing. For example, the old enum variantnix::Error::Sys(nix::errno::Errno::EINVAL)
is now simplynix::Error::EINVAL
. (#1446)
- Fixed buffer overflow in
unistd::getgrouplist
. (#1545)
- Locked bitflags to < 1.3.0 to fix the build with rust < 1.46.0.
- Removed a couple of termios constants on redox that were never actually supported. (#1483)
- Added
getresuid
andgetresgid
(#1430) - Added TIMESTAMPNS support for linux (#1402)
- Added
sendfile64
(#1439) - Added
MS_LAZYTIME
toMsFlags
(#1437)
- Made
forkpty
unsafe, likefork
(#1390) - Made
Uid
,Gid
andPid
methodsfrom_raw
andas_raw
aconst fn
(#1429) - Made
Uid::is_root
aconst fn
(#1429) AioCb
is now always pinned. Once alibc::aiocb
gets sent to the kernel, its address in memory must not change. Nix now enforces that by usingstd::pin
. Most users won't need to change anything, except when usingaio_suspend
. See that method's documentation for the new usage. (#1440)LioCb
is now constructed using a distinctLioCbBuilder
struct. This avoids a soundness issue with the oldLioCb
. Usage is similar but construction now uses the builder pattern. See the documentation for details. (#1440)- Minimum supported Rust version is now 1.41.0. (#1440)
- Errno aliases are now associated consts on
Errno
, instead of consts in theerrno
module. (#1452)
- Allow
sockaddr_ll
size, as reported by the Linux kernel, to be smaller then it's definition (#1395) - Fix spurious errors using
sendmmsg
with multiple cmsgs (#1414) - Added
Errno::EOPNOTSUPP
to FreeBSD, where it was missing. (#1452)
- Removed
sys::socket::accept4
from Android arm because libc removed it in version 0.2.87. (#1399) AioCb::from_boxed_slice
andAioCb::from_boxed_mut_slice
have been removed. They were useful with earlier versions of Rust, but should no longer be needed now that async/await are available.AioCb
s now work exclusively with borrowed buffers, not owned ones. (#1440)- Removed some Errno values from platforms where they aren't actually defined. (#1452)
- Fixed buffer overflow in
unistd::getgrouplist
. (#1545)
- Locked bitflags to < 1.3.0 to fix the build with rust < 1.46.0.
- Removed a couple of termios constants on redox that were never actually supported. (#1483)
- Added a
passwd
field toGroup
(#1338) - Added
mremap
(#1306) - Added
personality
(#1331) - Added limited Fuchsia support (#1285)
- Added
getpeereid
(#1342) - Implemented
IntoIterator
forDir
(#1333).
- Minimum supported Rust version is now 1.40.0. (#1356)
- i686-apple-darwin has been demoted to Tier 2 support, because it's deprecated by Xcode. (#1350)
- Fixed calling
recvfrom
on anAddrFamily::Packet
socket (#1344)
TimerFd
now closes the underlying fd on drop. (#1381)- Define
*_MAGIC
filesystem constants on Linux s390x (#1372) - mqueue, sysinfo, timespec, statfs, test_ptrace_syscall() on x32 (#1366)
Dir
,SignalFd
, andPtyMaster
are no longerClone
. (#1382)- Removed
SockLevel
, which hasn't been used for a few years (#1362) - Removed both
Copy
andClone
fromTimerFd
. (#1381)
- Fixed bugs in
recvmmsg
. (#1341)
- Added Netlink protocol families to the
SockProtocol
enum (#1289) - Added
clock_gettime
,clock_settime
,clock_getres
,clock_getcpuclockid
functions andClockId
struct. (#1281) - Added wrapper functions for
PTRACE_SYSEMU
andPTRACE_SYSEMU_SINGLESTEP
. (#1300) - Add support for Vsock on Android rather than just Linux. (#1301)
- Added
TCP_KEEPCNT
andTCP_KEEPINTVL
TCP keepalive options. (#1283)
- Expose
SeekData
andSeekHole
on all Linux targets (#1284) - Changed unistd::{execv,execve,execvp,execvpe,fexecve,execveat} to take both
&[&CStr]
and&[CString]
as its list argument(s). (#1278) - Made
unistd::fork
an unsafe funtion, bringing it in line with libstd's decision. (#1293)
- Added
fchown(2)
wrapper. (#1257) - Added support on linux systems for
MAP_HUGE_
SIZE
family of flags. (#1211) - Added support for
F_OFD_*
fcntl
commands on Linux and Android. (#1195) - Added
env::clearenv()
: callslibc::clearenv
on platforms where it's available, and clears the environment of all variables viastd::env::vars
andstd::env::remove_var
on others. (#1185) FsType
inner value made public. (#1187)- Added
unistd::setfsuid
andunistd::setfsgid
to set the user or group identity for filesystem checks per-thread. (#1163) - Derived
Ord
,PartialOrd
forunistd::Pid
(#1189) - Added
select::FdSet::fds
method to iterate over file descriptors in a set. (#1207) - Added support for UDP generic segmentation offload (GSO) and generic receive offload (GRO) (#1209)
- Added support for
sendmmsg
andrecvmmsg
calls (#1208) - Added support for
SCM_CREDS
messages (UnixCredentials
) on FreeBSD/DragonFly (#1216) - Added
BindToDevice
socket option (sockopt) on Linux (#1233) - Added
EventFilter
bitflags forEV_DISPATCH
andEV_RECEIPT
on OpenBSD. (#1252) - Added support for
Ipv4PacketInfo
andIpv6PacketInfo
toControlMessage
. (#1222) CpuSet
andUnixCredentials
now implementDefault
. (#1244)- Added
unistd::ttyname
(#1259) - Added support for
Ipv4PacketInfo
andIpv6PacketInfo
toControlMessage
for iOS and Android. (#1265) - Added support for
TimerFd
. (#1261)
- Changed
fallocate
return type fromc_int
to()
(#1201) - Enabled
sys::ptrace::setregs
andsys::ptrace::getregs
on x86_64-unknown-linux-musl target (#1198) - On Linux,
ptrace::write
is now anunsafe
function. Caveat programmer. (#1245) execv
,execve
,execvp
andexecveat
in::nix::unistd
andreboot
in::nix::sys::reboot
now returnResult<Infallible>
instead ofResult<Void>
(#1239)sys::socket::sockaddr_storage_to_addr
is no longerunsafe
. So isoffset_of!
.sys::socket::sockaddr_storage_to_addr
,offset_of!
, andErrno::clear
are no longerunsafe
.SockAddr::as_ffi_pair
,sys::socket::sockaddr_storage_to_addr
,offset_of!
, andErrno::clear
are no longerunsafe
. (#1244)- Several
Inotify
methods now takeself
by value instead of by reference (#1244) nix::poll::ppoll
:timeout
parameter is now optional, None is equivalent for infinite timeout.
-
Fixed
getsockopt
. The old code produced UB which triggers a panic with Rust 1.44.0. (#1214) -
Fixed a bug in nix::unistd that would result in an infinite loop when a group or user lookup required a buffer larger than 16KB. (#1198)
-
Fixed unaligned casting of
cmsg_data
toaf_alg_iv
(#1206) -
Fixed
readlink
/readlinkat
when reading symlinks longer thanPATH_MAX
(#1231) -
PollFd
,EpollEvent
,IpMembershipRequest
,Ipv6MembershipRequest
,TimeVal
, andIoVec
are nowrepr(transparent)
. This is required for correctness's sake across all architectures and compilers, though now bugs have been reported so far. (#1243) -
Fixed unaligned pointer read in
Inotify::read_events
. (#1244)
-
Removed
sys::socket::addr::from_libc_sockaddr
from the public API. (#1215) -
Removed
sys::termios::{get_libc_termios, get_libc_termios_mut, update_wrapper
from the public API. These were previously hidden in the docs but still usable by downstream. (#1235) -
Nix no longer implements
NixPath
forOption<P> where P: NixPath
. Most Nix functions that acceptNixPath
arguments can't do anything useful withNone
. The exceptions (mount
andquotactl_sync
) already take explicitly optional arguments. (#1242) -
Removed
unistd::daemon
andunistd::pipe2
on OSX and ios (#1255) -
Removed
sys::event::FilterFlag::NOTE_EXIT_REPARENTED
andsys::event::FilterFlag::NOTE_REAP
on OSX and ios. (#1255) -
Removed
sys::ptrace::ptrace
on Android and Linux. (#1255) -
Dropped support for powerpc64-unknown-linux-gnu (#1266)
- Add
CLK_TCK
toSysconfVar
(#1177)
- Removed deprecated Error::description from error types (#1175)
- Fixed the build for OpenBSD (#1168)
-
Added
ptrace::seize()
: similar toattach()
on Linux but with better-defined semantics. (#1154) -
Added
Signal::as_str()
: returns signal name as&'static str
(#1138) -
Added
posix_fallocate
. (#1105) -
Implemented
Default
forFdSet
(#1107) -
Added
NixPath::is_empty
. (#1107) -
Added
mkfifoat
(#1133) -
Added
User::from_uid
,User::from_name
,User::from_gid
andGroup::from_name
, (#1139) -
Added
linkat
(#1101) -
Added
sched_getaffinity
. (#1148) -
Added optional
Signal
argument toptrace::{detach, syscall}
for signal injection. (#1083)
-
sys::termios::BaudRate
now implementsTryFrom<speed_t>
instead ofFrom<speed_t>
. The oldFrom
implementation would panic on failure. (#1159) -
sys::socket::ControlMessage::ScmCredentials
andsys::socket::ControlMessageOwned::ScmCredentials
now wrapUnixCredentials
rather thanlibc::ucred
. (#1160) -
sys::socket::recvmsg
now takes a plainVec
instead of aCmsgBuffer
implementor. If you were already usingcmsg_space!
, then you needn't worry. (#1156) -
sys::socket::recvfrom
now returnsResult<(usize, Option<SockAddr>)>
instead ofResult<(usize, SockAddr)>
. (#1145) -
Signal::from_c_int
has been replaced bySignal::try_from
(#1113) -
Changed
readlink
andreadlinkat
to returnOsString
(#1109)# use nix::fcntl::{readlink, readlinkat}; // the buffer argument of `readlink` and `readlinkat` has been removed, // and the return value is now an owned type (`OsString`). // Existing code can be updated by removing the buffer argument // and removing any clone or similar operation on the output // old code `readlink(&path, &mut buf)` can be replaced with the following let _: OsString = readlink(&path); // old code `readlinkat(dirfd, &path, &mut buf)` can be replaced with the following let _: OsString = readlinkat(dirfd, &path);
-
Minimum supported Rust version is now 1.36.0. (#1108)
-
Ipv4Addr::octets
,Ipv4Addr::to_std
,Error::as_errno
,ForkResult::is_child
,ForkResult::is_parent
,Gid::as_raw
,Uid::is_root
,Uid::as_raw
,Pid::as_raw
, andPollFd::revents
now takeself
by value. (#1107) -
Type
&CString
for parameters ofexec(v|ve|vp|vpe|veat)
are changed to&CStr
. (#1121)
-
Fix length of abstract socket addresses (#1120)
-
Fix initialization of msghdr in recvmsg/sendmsg when built with musl (#1136)
- Remove the deprecated
CmsgSpace
. (#1156)
- Added
MSG_WAITALL
toMsgFlags
insys::socket
. (#1079) - Implemented
Clone
,Copy
,Debug
,Eq
,Hash
, andPartialEq
for most types that support them. (#1035) - Added
copy_file_range
wrapper (#1069) - Add
mkdirat
. (#1084) - Add
posix_fadvise
. (#1089) - Added
AF_VSOCK
toAddressFamily
. (#1091) - Add
unlinkat
(#1058) - Add
renameat
. (#1097)
- Support for
ifaddrs
now present when building for Android. (#1077) - Minimum supported Rust version is now 1.31.0 (#1035) (#1095)
- Now functions
statfs()
andfstatfs()
return result withStatfs
wrapper (#928)
- Enabled
sched_yield
for all nix hosts. (#1090)
-
Macros exported by
nix
may now be imported viause
on the Rust 2018 edition without importing helper macros on Linux targets. (#1066)For example, in Rust 2018, the
ioctl_read_bad!
macro can now be imported without importing theconvert_ioctl_res!
macro.use nix::ioctl_read_bad; ioctl_read_bad!(tcgets, libc::TCGETS, libc::termios);
- Changed some public types from reexports of libc types like
uint32_t
to the native equivalents likeu32.
(#1072)
- Fix the build on Android and Linux/mips with recent versions of libc. (#1072)
- Add IP_RECVIF & IP_RECVDSTADDR. Enable IP_PKTINFO and IP6_PKTINFO on netbsd/openbsd. (#1002)
- Added
inotify_init1
,inotify_add_watch
andinotify_rm_watch
wrappers for Android and Linux. (#1016) - Add
ALG_SET_IV
,ALG_SET_OP
andALG_SET_AEAD_ASSOCLEN
control messages andAF_ALG
socket types on Linux and Android (#1031) - Add killpg (#1034)
- Added ENOTSUP errno support for Linux and Android. (#969)
- Add several errno constants from OpenBSD 6.2 (#1036)
- Added
from_std
andto_std
methods forsys::socket::IpAddr
(#1043) - Added
nix::unistd:seteuid
andnix::unistd::setegid
for those platforms that do not supportsetresuid
norsetresgid
respectively. (#1044) - Added a
access
wrapper (#1045) - Add
forkpty
(#1042) - Add
sched_yield
(#1050)
-
PollFd
event flags renamed toPollFlags
(#1024) -
recvmsg
now returns an Iterator overControlMessageOwned
objects rather thanControlMessage
objects. This is sadly not backwards-compatible. Fix code like this:if let ControlMessage::ScmRights(&fds) = cmsg {
By replacing it with code like this:
if let ControlMessageOwned::ScmRights(fds) = cmsg {
(#1020)
-
Replaced
CmsgSpace
with thecmsg_space
macro. (#1020)
-
Fixed multiple bugs when using
sendmsg
andrecvmsg
with ancillary control messages (#1020) -
Macros exported by
nix
may now be imported viause
on the Rust 2018 edition without importing helper macros for BSD targets. (#1041)For example, in Rust 2018, the
ioctl_read_bad!
macro can now be imported without importing theconvert_ioctl_res!
macro.use nix::ioctl_read_bad; ioctl_read_bad!(tcgets, libc::TCGETS, libc::termios);
Daemon
,NOTE_REAP
, andNOTE_EXIT_REPARENTED
are now deprecated on OSX and iOS. (#1033)PTRACE_GETREGS
,PTRACE_SETREGS
,PTRACE_GETFPREGS
, andPTRACE_SETFPREGS
have been removed from some platforms where they never should've been defined in the first place. (#1055)
- Changed some public types from reexports of libc types like
uint32_t
to the native equivalents likeu32.
(#1072)
- Fix the build on Android and Linux/mips with recent versions of libc. (#1072)
- Fixed build on Linux/arm and Linux/s390x with the latest Rust libc (52102cb)
Daemon
,NOTE_REAP
, andNOTE_EXIT_REPARENTED
are now deprecated on OSX and iOS. (#1033)
- Added PKTINFO(V4) & V6PKTINFO cmsg support - Android/FreeBSD/iOS/Linux/MacOS. (#990)
- Added support of CString type in
setsockopt
. (#972) - Added option
TCP_CONGESTION
insetsockopt
. (#972) - Added
symlinkat
wrapper. (#997) - Added
ptrace::{getregs, setregs}
. (#1010) - Added
nix::sys::signal::signal
. (#817) - Added an
mprotect
wrapper. (#991)
lutimes
never worked on OpenBSD as it is not implemented on OpenBSD. It has been removed. (#1000)fexecve
never worked on NetBSD or on OpenBSD as it is not implemented on either OS. It has been removed. (#1000)
- Changed some public types from reexports of libc types like
uint32_t
to the native equivalents likeu32.
(#1072)
- Fix the build on Android and Linux/mips with recent versions of libc. (#1072)
- Fixed build on Linux/arm and Linux/s390x with the latest Rust libc (52102cb)
fexecve
never worked on NetBSD or on OpenBSD as it is not implemented on either OS. It has been removed. (#1000)Daemon
,NOTE_REAP
, andNOTE_EXIT_REPARENTED
are now deprecated on OSX and iOS. (#1033)
- Added
FromStr
andDisplay
impls fornix::sys::Signal
(#884) - Added a
sync
wrapper. (#961) - Added a
sysinfo
wrapper. (#922) - Support the
SO_PEERCRED
socket option and theUnixCredentials
type on all Linux and Android targets. (#921) - Added support for
SCM_CREDENTIALS
, allowing to send process credentials over Unix sockets. (#923) - Added a
dir
module for reading directories (wrapsfdopendir
,readdir
, andrewinddir
). (#916) - Added
kmod
module that allows loading and unloading kernel modules on Linux. (#930) - Added
futimens
andutimesat
wrappers (#944), anlutimes
wrapper (#967), and autimes
wrapper (#946). - Added
AF_UNSPEC
wrapper toAddressFamily
(#948) - Added the
mode_t
public alias withinsys::stat
. (#954) - Added a
truncate
wrapper. (#956) - Added a
fchownat
wrapper. (#955) - Added support for
ptrace
on BSD operating systems (#949) - Added
ptrace
functions for reads and writes to tracee memory and ptrace kill (#949) (#958) - Added a
acct
wrapper module for enabling and disabling process accounting (#952) - Added the
time_t
andsuseconds_t
public aliases withinsys::time
. (#968) - Added
unistd::execvpe
for Haiku, Linux and OpenBSD (#975) - Added
Error::as_errno
. (#977)
- Made
preadv
take immutable slice of IoVec. (#914) - Fixed passing multiple file descriptors over Unix Sockets. (#918)
- Changed some public types from reexports of libc types like
uint32_t
to the native equivalents likeu32.
(#1072)
- Fix the build on Android and Linux/mips with recent versions of libc. (#1072)
- Fixed build on Linux/arm and Linux/s390x with the latest Rust libc (52102cb)
fexecve
never worked on NetBSD or on OpenBSD as it is not implemented on either OS. It has been removed. (#1000)Daemon
,NOTE_REAP
, andNOTE_EXIT_REPARENTED
are now deprecated on OSX and iOS. (#1033)
- Added
sendfile
on FreeBSD and Darwin. (#901) - Added
pselect
(#894) - Exposed
preadv
andpwritev
on the BSDs. (#883) - Added
mlockall
andmunlockall
(#876) - Added
SO_MARK
on Linux. (#873) - Added safe support for nearly any buffer type in the
sys::aio
module. (#872) - Added
sys::aio::LioCb
as a wrapper forlibc::lio_listio
. (#872) - Added
unistd::getsid
(#850) - Added
alarm
. (#830) - Added interface flags
IFF_NO_PI, IFF_TUN, IFF_TAP
on linux-like systems. (#853) - Added
statvfs
module to all MacOS and Linux architectures. (#832) - Added
EVFILT_EMPTY
,EVFILT_PROCDESC
, andEVFILT_SENDFILE
on FreeBSD. (#825) - Exposed
termios::cfmakesane
on FreeBSD. (#825) - Exposed
MSG_CMSG_CLOEXEC
on *BSD. (#825) - Added
fchmod
,fchmodat
. (#857) - Added
request_code_write_int!
on FreeBSD/DragonFlyBSD (#833)
Display
andDebug
forSysControlAddr
now includes all fields. (#837)ioctl!
has been replaced with a family ofioctl_*!
macros. (#833)io!
,ior!
,iow!
, andiorw!
has been renamed torequest_code_none!
,request_code_read!
,request_code_write!
, andrequest_code_readwrite!
respectively. These have also now been exposed in the documentation. (#833)- Enabled more
ptrace::Request
definitions for uncommon Linux platforms (#892) - Emulation of
FD_CLOEXEC
andO_NONBLOCK
was removed fromsocket()
,accept4()
, andsocketpair()
. (#907)
- Fixed possible panics when using
SigAction::flags
on Linux (#869) - Properly exposed 460800 and 921600 baud rates on NetBSD (#837)
- Fixed
ioctl_write_int!
on FreeBSD/DragonFlyBSD (#833) ioctl_write_int!
now properly supports passing ac_ulong
as the parameter on Linux non-musl targets (#833)
- Removed explicit support for the
bytes
crate from thesys::aio
module. Seesys::aio::AioCb::from_boxed_slice
examples for alternatives. (#872) - Removed
sys::aio::lio_listio
. Usesys::aio::LioCb::listio
instead. (#872) - Removed emulated
accept4()
from macos, ios, and netbsd targets (#907) - Removed
IFF_NOTRAILERS
on OpenBSD, as it has been removed in OpenBSD 6.3 (#893)
- Added specialized wrapper:
sys::ptrace::step
(#852) - Added
AioCb::from_ptr
andAioCb::from_mut_ptr
(#820) - Added specialized wrappers:
sys::ptrace::{traceme, syscall, cont, attach}
. Using the matching routines withsys::ptrace::ptrace
is now deprecated. - Added
nix::poll
module for all platforms (#672) - Added
nix::ppoll
function for FreeBSD and DragonFly (#672) - Added protocol families in
AddressFamily
enum. (#647) - Added the
pid()
method toWaitStatus
for extracting the PID. (#722) - Added
nix::unistd:fexecve
. (#727) - Expose
uname()
on all platforms. (#739) - Expose
signalfd
module on Android as well. (#739) - Added
nix::sys::ptrace::detach
. (#749) - Added timestamp socket control message variant:
nix::sys::socket::ControlMessage::ScmTimestamp
(#663) - Added socket option variant that enables the timestamp socket
control message:
nix::sys::socket::sockopt::ReceiveTimestamp
(#663) - Added more accessor methods for
AioCb
(#773) - Add
nix::sys::fallocate
(#768) - Added
nix::unistd::mkfifo
. (#602) - Added
ptrace::Options::PTRACE_O_EXITKILL
on Linux and Android. (#771) - Added
nix::sys::uio::{process_vm_readv, process_vm_writev}
on Linux (#568) - Added
nix::unistd::{getgroups, setgroups, getgrouplist, initgroups}
. (#733) - Added
nix::sys::socket::UnixAddr::as_abstract
on Linux and Android. (#785) - Added
nix::unistd::execveat
on Linux and Android. (#800) - Added the
from_raw()
method toWaitStatus
for converting raw status values toWaitStatus
independent of syscalls. (#741) - Added more standard trait implementations for various types. (#814)
- Added
sigprocmask
to the signal module. (#826) - Added
nix::sys::socket::LinkAddr
on Linux and all bsdlike system. (#813) - Add socket options for
IP_TRANSPARENT
/BIND_ANY
. (#835)
- Exposed the
mqueue
module for all supported operating systems. (#834) - Use native
pipe2
on all BSD targets. Users should notice no difference. (#777) - Renamed existing
ptrace
wrappers to encourage namespacing (#692) - Marked
sys::ptrace::ptrace
asunsafe
. - Changed function signature of
socket()
andsocketpair()
. Theprotocol
argument has changed type fromc_int
toSockProtocol
. It accepts aNone
value for default protocol that was specified with zero usingc_int
. (#647) - Made
select
easier to use, adding the ability to automatically calculate thenfds
parameter using the newFdSet::highest
(#701) - Exposed
unistd::setresuid
andunistd::setresgid
on FreeBSD and OpenBSD (#721) - Refactored the
statvfs
module removing extraneous API functions and thestatvfs::vfs
module. Additionally(f)statvfs()
now return the struct directly. And the returnedStatvfs
struct now exposes its data through accessor methods. (#729) - The
addr
argument tomadvise
andmsync
is now*mut
to better match the libc API. (#731) shm_open
andshm_unlink
are no longer exposed on Android targets, where they are not officially supported. (#731)MapFlags
,MmapAdvise
, andMsFlags
expose some more variants and only officially-supported variants are provided for each target. (#731)- Marked
pty::ptsname
function asunsafe
(#744) - Moved constants ptrace request, event and options to enums and updated ptrace functions and argument types accordingly. (#749)
AioCb::Drop
will now panic if theAioCb
is still in-progress (#715)- Restricted
nix::sys::socket::UnixAddr::new_abstract
to Linux and Android only. (#785) - The
ucred
struct has been removed in favor of aUserCredentials
struct that contains only getters for its fields. (#814) - Both
ip_mreq
andipv6_mreq
have been replaced withIpMembershipRequest
andIpv6MembershipRequest
. (#814) - Removed return type from
pause
. (#829) - Changed the termios APIs to allow for using a
u32
instead of theBaudRate
enum on BSD platforms to support arbitrary baud rates. See the module docs fornix::sys::termios
for more details. (#843)
- Fix compilation and tests for OpenBSD targets (#688)
- Fixed error handling in
AioCb::fsync
,AioCb::read
, andAioCb::write
. It is no longer an error to drop anAioCb
that failed to enqueue in the OS. (#715) - Fix potential memory corruption on non-Linux platforms when using
sendmsg
/recvmsg
, caused by mismatchedmsghdr
definition. (#648)
AioCb::from_boxed_slice
has been removed. It was never actually safe. Usefrom_bytes
orfrom_bytes_mut
instead. (#820)- The syscall module has been removed. This only exposed enough functionality for
memfd_create()
andpivot_root()
, which are still exposed as separate functions. (#747) - The
Errno
variants are no longer reexported from theerrno
module.Errno
itself is no longer reexported from the crate root and instead must be accessed using theerrno
module. (#696) - Removed
MS_VERBOSE
,MS_NOSEC
, andMS_BORN
fromMsFlags
. These are internal kernel flags and should never have been exposed. (#814)
- Added
sysconf
,pathconf
, andfpathconf
(#630 - Added
sys::signal::SigAction::{ flags, mask, handler}
(#611 - Added
nix::sys::pthread::pthread_self
(#591 - Added
AioCb::from_boxed_slice
(#582 - Added
nix::unistd::{openat, fstatat, readlink, readlinkat}
(#551) - Added
nix::pty::{grantpt, posix_openpt, ptsname/ptsname_r, unlockpt}
(#556 - Added
nix::ptr::openpty
(#456) - Added
nix::ptrace::{ptrace_get_data, ptrace_getsiginfo, ptrace_setsiginfo and nix::Error::UnsupportedOperation}
(#614) - Added
cfmakeraw
,cfsetspeed
, andtcgetsid
. (#527) - Added "bad none", "bad write_ptr", "bad write_int", and "bad readwrite" variants to the
ioctl!
macro. (#670) - On Linux and Android, added support for receiving
PTRACE_O_TRACESYSGOOD
events fromwait
andwaitpid
usingWaitStatus::PtraceSyscall
(#566).
- The
ioctl!
macro and its variants now allow the generated functions to have doccomments. (#661) - Changed
ioctl!(write ...)
intoioctl!(write_ptr ...)
andioctl!(write_int ..)
variants to more clearly separate those use cases. (#670) - Marked
sys::mman::{ mmap, munmap, madvise, munlock, msync }
as unsafe. (#559) - Minimum supported Rust version is now 1.13.
- Removed
revents
argument fromPollFd::new()
as it's an output argument and will be overwritten regardless of value. (#542) - Changed type signature of
sys::select::FdSet::contains
to makeself
immutable (#564) - Introduced wrapper types for
gid_t
,pid_t
, anduid_t
asGid
,Pid
, andUid
respectively. Various functions have been changed to use these new types as arguments. (#629) - Fixed compilation on all Android and iOS targets (#527) and promoted them to Tier 2 support.
nix::sys::statfs::{statfs,fstatfs}
uses statfs definition fromlibc::statfs
instead of own linux specific typenix::sys::Statfs
. Also file system type constants likenix::sys::statfs::ADFS_SUPER_MAGIC
were removed in favor of the libc equivalent. (#561)- Revised the termios API including additional tests and documentation and exposed it on iOS. (#527)
eventfd
,signalfd
, andpwritev
/preadv
functionality is now included by default for all supported platforms. (#681)- The
ioctl!
macro's plain variants has been replaced with "bad read" to be consistent with other variants. The generated functions also have more strict types for their arguments. The "*_buf" variants also now calculate total array size and take slice references for improved type safety. The documentation has also been dramatically improved. (#670)
- Removed
io::Error
fromnix::Error
and the conversion fromnix::Error
toErrno
(#614) - All feature flags have been removed in favor of conditional compilation on supported platforms.
execvpe
is no longer supported, but this was already broken and will be added back in the next release. (#681) - Removed
ioc_*
functions and many helper constants and macros within theioctl
module. These should always have been private and only theioctl!
should be used in public code. (#670)
- Fixed multiple issues compiling under different archetectures and OSes.
Now compiles on Linux/MIPS (#538),
Linux/PPC
(#553),MacOS/x86_64,i686
(#553),NetBSD/x64_64
(#538),FreeBSD/x86_64,i686
(#536), andAndroid
(#631). bind
anderrno_location
now work correctly onAndroid
(#631)- Added
nix::ptrace
on all Linux-kernel-based platforms #624. Previously it was only available on x86, x86-64, and ARM, and also not on Android. - Fixed
sys::socket::sendmsg
with zero entrycmsgs
parameter. (#623) - Multiple constants related to the termios API have now been properly defined for all supported platforms. (#527)
ioctl!
macro now supports working with non-int datatypes and properly supports all platforms. (#670)
- Fixed build on FreeBSD. (Cherry-picked a859ee3c)
- Added
::nix::sys::termios::BaudRate
enum to provide portable baudrate values. (#518) - Added a new
WaitStatus::PtraceEvent
to support ptrace events on Linux and Android (#438) - Added support for POSIX AIO (#483) (#506)
- Added support for XNU system control sockets (#478)
- Added support for
ioctl
calls on BSD platforms (#478) - Added struct
TimeSpec
(#475) (#483) - Added complete definitions for all kqueue-related constants on all supported OSes (#415)
- Added function
epoll_create1
and bitflagsEpollCreateFlags
in::nix::sys::epoll
in order to support::libc::epoll_create1
. (#410) - Added
setresuid
andsetresgid
for Linux in::nix::unistd
(#448) - Added
getpgid
in::nix::unistd
(#433) - Added
tcgetpgrp
andtcsetpgrp
in::nix::unistd
(#451) - Added
CLONE_NEWCGROUP
in::nix::sched
(#457) - Added
getpgrp
in::nix::unistd
(#491) - Added
fchdir
in::nix::unistd
(#497) - Added
major
andminor
in::nix::sys::stat
for decomposingdev_t
(#508) - Fixed the style of many bitflags and use
libc
in more places. (#503) - Added
ppoll
in::nix::poll
(#520) - Added support for getting and setting pipe size with fcntl(2) on Linux (#540)
::nix::sys::termios::{cfgetispeed, cfsetispeed, cfgetospeed, cfsetospeed}
switched to useBaudRate
enum fromspeed_t
. (#518)epoll_ctl
now could accept None as argumentevent
when op isEpollOp::EpollCtlDel
. (#480)- Removed the
bad
keyword from theioctl!
macro (#478) - Changed
TimeVal
into an opaque Newtype (#475) kill
's signature, defined in::nix::sys::signal
, changed, so that the signal parameter has typeT: Into<Option<Signal>>
.None
as an argument for that parameter will result in a 0 passed to libc'skill
, while aSome
-argument will result in the previous behavior for the containedSignal
. (#445)- The minimum supported version of rustc is now 1.7.0. (#444)
- Changed
KEvent
to an opaque structure that may only be modified by its constructor and theev_set
method. (#415) (#442) (#463) pipe2
now callslibc::pipe2
where available. Previously it was emulated usingpipe
, which meant that settingO_CLOEXEC
was not atomic. (#427)- Renamed
EpollEventKind
toEpollFlags
in::nix::sys::epoll
in order for it to conform with our conventions. (#410) EpollEvent
in::nix::sys::epoll
is now an opaque proxy for::libc::epoll_event
. The formerly public fieldevents
is now be read-only accessible with the new methodevents()
ofEpollEvent
. Instances ofEpollEvent
can be constructed using the new methodnew()
of EpollEvent. (#410)SigFlags
in::nix::sys::signal
has be renamed toSigmaskHow
and its type has changed frombitflags
toenum
in order to conform to our conventions. (#460)sethostname
now takes a&str
instead of a&[u8]
as this provides an API that makes more sense in normal, correct usage of the API.gethostname
previously did not expose the actual length of the hostname written from the underlying system call at all. This has been updated to return a&CStr
within the provided buffer that is always properly NUL-terminated (this is not guaranteed by the call with all platforms/libc implementations).- Exposed all fcntl(2) operations at the module level, so they can be
imported direclty instead of via
FcntlArg
enum. (#541)
- Fixed multiple issues with Unix domain sockets on non-Linux OSes (#474)
- Fixed using kqueue with
EVFILT_USER
on FreeBSD (#415) - Fixed the build on FreeBSD, and fixed the getsockopt, sendmsg, and recvmsg functions on that same OS. (#397)
- Fixed an off-by-one bug in
UnixAddr::new_abstract
in::nix::sys::socket
. (#429) - Fixed clone passing a potentially unaligned stack. (#490)
- Fixed mkdev not creating a
dev_t
the same way as libc. (#508)
- Added
lseek
andlseek64
in::nix::unistd
(#377) - Added
mkdir
andgetcwd
in::nix::unistd
(#416) - Added accessors
sigmask_mut
andsigmask
toUContext
in::nix::ucontext
. (#370) - Added
WUNTRACED
toWaitPidFlag
in::nix::sys::wait
for non-linux targets. (#379) - Added new module
::nix::sys::reboot
with enumerationRebootMode
and functionsreboot
andset_cad_enabled
. Currently for linux only. (#386) FdSet
in::nix::sys::select
now also implementsClone
. (#405)- Added
F_FULLFSYNC
toFcntlArg
in::nix::fcntl
for apple targets. (#407) - Added
CpuSet::unset
in::nix::sched
. (#402) - Added constructor method
new()
toPollFd
in::nix::poll
, in order to allow creation of objects, after removing public access to members. (#399) - Added method
revents()
toPollFd
in::nix::poll
, in order to provide read access to formerly public memberrevents
. (#399) - Added
MSG_CMSG_CLOEXEC
toMsgFlags
in::nix::sys::socket
for linux only. (#422)
- Replaced the reexported integer constants for signals by the enumeration
Signal
in::nix::sys::signal
. (#362) - Renamed
EventFdFlag
toEfdFlags
in::nix::sys::eventfd
. (#383) - Changed the result types of
CpuSet::is_set
andCpuSet::set
in::nix::sched
toResult<bool>
andResult<()>
, respectively. They now returnEINVAL
, if an invalid argument for thefield
parameter is passed. (#402) MqAttr
in::nix::mqueue
is now an opaque proxy for::libc::mq_attr
, which has the same structure as the oldMqAttr
. The fieldmq_flags
of::libc::mq_attr
is readable using the new methodflags()
ofMqAttr
.MqAttr
also no longer implementsDebug
. (#392)- The parameter
msq_prio
ofmq_receive
with typeu32
in::nix::mqueue
was replaced by a parameter namedmsg_prio
with type&mut u32
, so that the message priority can be obtained by the caller. (#392) - The type alias
MQd
in::nix::queue
was replaced by the type aliaslibc::mqd_t
, both of which are aliases for the same type. (#392)
- Type alias
SigNum
from::nix::sys::signal
. (#362) - Type alias
CpuMask
from::nix::shed
. (#402) - Removed public fields from
PollFd
in::nix::poll
. (See also added methodrevents()
. (#399)
- Fixed the build problem for NetBSD (Note, that we currently do not support it, so it might already be broken again). (#389)
- Fixed the build on FreeBSD, and fixed the getsockopt, sendmsg, and recvmsg functions on that same OS. (#397)
- Added
gettid
in::nix::unistd
for linux and android. (#293) - Some mips support in
::nix::sched
and::nix::sys::syscall
. (#301) - Added
SIGNALFD_SIGINFO_SIZE
in::nix::sys::signalfd
. (#309) - Added new module
::nix::ucontext
with structUContext
. Currently for linux only. (#311) - Added
EPOLLEXCLUSIVE
toEpollEventKind
in::nix::sys::epoll
. (#330) - Added
pause
to::nix::unistd
. (#336) - Added
sleep
to::nix::unistd
. (#351) - Added
S_IFDIR
,S_IFLNK
,S_IFMT
toSFlag
in::nix::sys::stat
. (#359) - Added
clear
andextend
functions toSigSet
's implementation in::nix::sys::signal
. (#347) sockaddr_storage_to_addr
in::nix::sys::socket
now supportssockaddr_nl
on linux and android. (#366)- Added support for
SO_ORIGINAL_DST
in::nix::sys::socket
on linux. (#367) - Added
SIGINFO
in::nix::sys::signal
for the macos target as well asSIGPWR
andSIGSTKFLT
in::nix::sys::signal
for non-macos targets. (#361)
- Changed the structure
IoVec
in::nix::sys::uio
. (#304) - Replaced
CREATE_NEW_FD
bySIGNALFD_NEW
in::nix::sys::signalfd
. (#309) - Renamed
SaFlag
toSaFlags
andSigFlag
toSigFlags
in::nix::sys::signal
. (#314) - Renamed
Fork
toForkResult
and changed its fields in::nix::unistd
. (#332) - Added the
signal
parameter toclone
's signature in::nix::sched
. (#344) execv
,execve
, andexecvp
now returnResult<Void>
instead ofResult<()>
in::nix::unistd
. (#357)
- Improved the conversion from
std::net::SocketAddr
toInetAddr
in::nix::sys::socket::addr
. (#335)