Skip to content

Commit

Permalink
Rollup merge of #124788 - madsmtm:reduce-target_os-macos, r=workingju…
Browse files Browse the repository at this point in the history
…bilee

Convert instances of `target_os = "macos"` to `target_vendor = "apple"`

#124491 migrated towards using `target_vendor = "apple"` more, as there's very little difference between iOS, tvOS, watchOS and visionOS. In that PR, I only did the changes where the standard library already had fixes for iOS, that I could confidently apply to the other targets.

However, there's actually also not that big of a gap between macOS and the aforementioned platforms - so in this PR, I've gone through a few of the instances of `target_os = "macos"` and replaced it with `target_vendor = "apple"` to improve support on those platforms, see the commits for details.

r? workingjubilee

CC `@thomcc` `@simlay` (do tell me if I should stop pinging you on these Apple PRs)

`@rustbot` label O-apple
  • Loading branch information
workingjubilee authored May 8, 2024
2 parents 40926fd + ff41c99 commit 037c62a
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 21 deletions.
12 changes: 8 additions & 4 deletions library/std/src/os/unix/net/listener.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,25 @@ impl UnixListener {
))]
const backlog: core::ffi::c_int = 128;
#[cfg(any(
// Silently capped to `/proc/sys/net/core/somaxconn`.
target_os = "linux",
// Silently capped to `kern.ipc.soacceptqueue`.
target_os = "freebsd",
// Silently capped to `kern.somaxconn sysctl`.
target_os = "openbsd",
target_os = "macos"
// Silently capped to the default 128.
target_vendor = "apple",
))]
const backlog: core::ffi::c_int = -1;
#[cfg(not(any(
target_os = "windows",
target_os = "redox",
target_os = "espidf",
target_os = "horizon",
target_os = "linux",
target_os = "freebsd",
target_os = "openbsd",
target_os = "macos",
target_os = "espidf",
target_os = "horizon"
target_vendor = "apple",
)))]
const backlog: libc::c_int = libc::SOMAXCONN;

Expand Down
8 changes: 7 additions & 1 deletion library/std/src/sys/pal/unix/alloc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@ unsafe impl GlobalAlloc for System {
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
libc::malloc(layout.size()) as *mut u8
} else {
#[cfg(target_os = "macos")]
// `posix_memalign` returns a non-aligned value if supplied a very
// large alignment on older versions of Apple's platforms (unknown
// exactly which version range, but the issue is definitely
// present in macOS 10.14 and iOS 13.3).
//
// <https://github.com/rust-lang/rust/issues/30170>
#[cfg(target_vendor = "apple")]
{
if layout.align() > (1 << 31) {
return ptr::null_mut();
Expand Down
11 changes: 6 additions & 5 deletions library/std/src/sys/pal/unix/fd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@ pub struct FileDesc(OwnedFd);
// with the man page quoting that if the count of bytes to read is
// greater than `SSIZE_MAX` the result is "unspecified".
//
// On macOS, however, apparently the 64-bit libc is either buggy or
// On Apple targets however, apparently the 64-bit libc is either buggy or
// intentionally showing odd behavior by rejecting any read with a size
// larger than or equal to INT_MAX. To handle both of these the read
// size is capped on both platforms.
#[cfg(target_os = "macos")]
const READ_LIMIT: usize = libc::c_int::MAX as usize - 1;
#[cfg(not(target_os = "macos"))]
const READ_LIMIT: usize = libc::ssize_t::MAX as usize;
const READ_LIMIT: usize = if cfg!(target_vendor = "apple") {
libc::c_int::MAX as usize - 1
} else {
libc::ssize_t::MAX as usize
};

#[cfg(any(
target_os = "dragonfly",
Expand Down
18 changes: 9 additions & 9 deletions library/std/src/sys/pal/unix/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1493,11 +1493,11 @@ impl fmt::Debug for File {
readlink(&p).ok()
}

#[cfg(target_os = "macos")]
#[cfg(target_vendor = "apple")]
fn get_path(fd: c_int) -> Option<PathBuf> {
// FIXME: The use of PATH_MAX is generally not encouraged, but it
// is inevitable in this case because macOS defines `fcntl` with
// `F_GETPATH` in terms of `MAXPATHLEN`, and there are no
// is inevitable in this case because Apple targets define `fcntl`
// with `F_GETPATH` in terms of `MAXPATHLEN`, and there are no
// alternatives. If a better method is invented, it should be used
// instead.
let mut buf = vec![0; libc::PATH_MAX as usize];
Expand Down Expand Up @@ -1538,12 +1538,12 @@ impl fmt::Debug for File {

#[cfg(not(any(
target_os = "linux",
target_os = "macos",
target_os = "vxworks",
all(target_os = "freebsd", target_arch = "x86_64"),
target_os = "netbsd",
target_os = "illumos",
target_os = "solaris"
target_os = "solaris",
target_vendor = "apple",
)))]
fn get_path(_fd: c_int) -> Option<PathBuf> {
// FIXME(#24570): implement this for other Unix platforms
Expand All @@ -1552,12 +1552,12 @@ impl fmt::Debug for File {

#[cfg(any(
target_os = "linux",
target_os = "macos",
target_os = "freebsd",
target_os = "hurd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "vxworks"
target_os = "vxworks",
target_vendor = "apple",
))]
fn get_mode(fd: c_int) -> Option<(bool, bool)> {
let mode = unsafe { libc::fcntl(fd, libc::F_GETFL) };
Expand All @@ -1574,12 +1574,12 @@ impl fmt::Debug for File {

#[cfg(not(any(
target_os = "linux",
target_os = "macos",
target_os = "freebsd",
target_os = "hurd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "vxworks"
target_os = "vxworks",
target_vendor = "apple",
)))]
fn get_mode(_fd: c_int) -> Option<(bool, bool)> {
// FIXME(#24570): implement this for other Unix platforms
Expand Down
4 changes: 2 additions & 2 deletions library/std/src/sys/pal/unix/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ pub unsafe fn init(argc: isize, argv: *const *const u8, sigpipe: u8) {
args::init(argc, argv);

// Normally, `thread::spawn` will call `Thread::set_name` but since this thread
// already exists, we have to call it ourselves. We only do this on macos
// already exists, we have to call it ourselves. We only do this on Apple targets
// because some unix-like operating systems such as Linux share process-id and
// thread-id for the main thread and so renaming the main thread will rename the
// process and we only want to enable this on platforms we've tested.
if cfg!(target_os = "macos") {
if cfg!(target_vendor = "apple") {
thread::Thread::set_name(&c"main");
}

Expand Down

0 comments on commit 037c62a

Please sign in to comment.