rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
96.32k stars 12.46k forks source link

Command.spawn posix_spawn support for NetBSD / DragonFlyBSD. #48681

Open bdrewery opened 6 years ago

bdrewery commented 6 years ago

Issue #48624 is adding support for the more efficient posix_spawn in some cases of Command.spawn. The posix_spawn of NetBSD and DragonFlyBSD supports returning ENOENT directly so these platforms can grow support for it. They just need the libc bindings (like in https://github.com/rust-lang/libc/commit/92d50c9c79e7038db097344d8f00e774277ee519) and then an update to libstd's Command target list as done in #48624.

OpenBSD does not support this though as their implementation uses fork rather than vfork and lacks a communication back to the parent about the exec failure.

This test .c file was used to check for the needed support:

#include <assert.h>
#include <stdlib.h>
#include <errno.h>
#include <spawn.h>

extern char **environ;

int
main(void)
{
    pid_t pid;
    char *pargv[] = {"/nonexistent", NULL};
    int status = posix_spawn(&pid, "/nonexistent", NULL, NULL, pargv, environ);
    assert(status == ENOENT);
    return 0;
}

A failing assert means the platform cannot grow posix_spawn support.

bdrewery commented 6 years ago

This can be labeled as an enhancement.