Merge branch 'spawn-doc' into 'master'
add descriptions to the spawn header functions See merge request redox-os/relibc!1473
This commit is contained in:
@@ -22,6 +22,7 @@ pub enum Action {
|
|||||||
|
|
||||||
struct FileActions(Vec<Action>);
|
struct FileActions(Vec<Action>);
|
||||||
|
|
||||||
|
/// A spawn file actions object.
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub struct posix_spawn_file_actions_t {
|
pub struct posix_spawn_file_actions_t {
|
||||||
@@ -30,6 +31,7 @@ pub struct posix_spawn_file_actions_t {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl posix_spawn_file_actions_t {
|
impl posix_spawn_file_actions_t {
|
||||||
|
/// Adds an `Action` to `posix_spawn_file_actions_t`.
|
||||||
pub fn add_action(&mut self, action: Action) {
|
pub fn add_action(&mut self, action: Action) {
|
||||||
let v = ptr::from_mut(self).cast::<FileActions>();
|
let v = ptr::from_mut(self).cast::<FileActions>();
|
||||||
unsafe {
|
unsafe {
|
||||||
@@ -72,8 +74,14 @@ impl IntoIterator for &posix_spawn_file_actions_t {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_init.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_init.html>.
|
||||||
///
|
///
|
||||||
|
/// Initializes the object referenced by `file_actions` to contain no file
|
||||||
|
/// actions for `posix_spawn()` or `posix_spawnp()` to perform.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub extern "C" fn posix_spawn_file_actions_init(
|
pub extern "C" fn posix_spawn_file_actions_init(
|
||||||
@@ -90,16 +98,25 @@ pub extern "C" fn posix_spawn_file_actions_init(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_destroy.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_destroy.html>.
|
||||||
///
|
///
|
||||||
|
/// Destroys the object referenced by `file_actions`, effectively making it
|
||||||
|
/// uninitialized.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// If `file_actions` is not `NULL`, then it must be a pointer to a `file_actions` object that was initialised by calling `posix_spawn_file_actions_init`.
|
/// If `file_actions` is not `NULL`, then it must be a pointer to a
|
||||||
|
/// `file_actions` object that was initialised by calling
|
||||||
|
/// `posix_spawn_file_actions_init()`.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn_file_actions_destroy(
|
pub unsafe extern "C" fn posix_spawn_file_actions_destroy(
|
||||||
file_actions: *mut posix_spawn_file_actions_t,
|
file_actions: *mut posix_spawn_file_actions_t,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
|
// TODO should we be returning EINVAL when `file_actions` is invalid?
|
||||||
if file_actions.is_null() {
|
if file_actions.is_null() {
|
||||||
panic!("file_actions cannot be NULL");
|
panic!("file_actions cannot be NULL");
|
||||||
}
|
}
|
||||||
@@ -109,26 +126,31 @@ pub unsafe extern "C" fn posix_spawn_file_actions_destroy(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addopen.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addopen.html>.
|
||||||
///
|
///
|
||||||
|
/// Adds an open action to a spawn file actions object.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `path` must be a valid null-terminated C string.
|
/// `path` must be a valid null-terminated C string.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn_file_actions_addopen(
|
pub unsafe extern "C" fn posix_spawn_file_actions_addopen(
|
||||||
file_actions: *mut posix_spawn_file_actions_t,
|
file_actions: *mut posix_spawn_file_actions_t,
|
||||||
fd: c_int,
|
fildes: c_int,
|
||||||
path: *const c_char,
|
path: *const c_char,
|
||||||
oflag: c_int,
|
oflag: c_int,
|
||||||
mode: mode_t,
|
mode: mode_t,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
||||||
if fd < 0 {
|
if fildes < 0 {
|
||||||
return EBADF;
|
return EBADF;
|
||||||
}
|
}
|
||||||
file_actions.add_action(Action::Open {
|
file_actions.add_action(Action::Open {
|
||||||
fd,
|
fd: fildes,
|
||||||
path: if path.is_null() {
|
path: if path.is_null() {
|
||||||
CString::new("").unwrap()
|
CString::new("").unwrap()
|
||||||
} else {
|
} else {
|
||||||
@@ -140,31 +162,44 @@ pub unsafe extern "C" fn posix_spawn_file_actions_addopen(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addclose.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addclose.html>.
|
||||||
///
|
///
|
||||||
|
/// Adds a close action to a spawn file actions object.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `file_actions` must be initialised.
|
/// `file_actions` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn_file_actions_addclose(
|
pub unsafe extern "C" fn posix_spawn_file_actions_addclose(
|
||||||
file_actions: *mut posix_spawn_file_actions_t,
|
file_actions: *mut posix_spawn_file_actions_t,
|
||||||
fd: c_int,
|
fildes: c_int,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
||||||
if fd < 0 {
|
if fildes < 0 {
|
||||||
return EBADF;
|
return EBADF;
|
||||||
}
|
}
|
||||||
file_actions.add_action(Action::Close(fd));
|
file_actions.add_action(Action::Close(fildes));
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addchdir.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addchdir.html>.
|
||||||
///
|
///
|
||||||
|
/// Adds a chdir action to the object referenced by `file_actions` that shall
|
||||||
|
/// cause the working directory to be set to `path` (as if `chdir(path)` had
|
||||||
|
/// been called) when a new process is spawned using this file actions object.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `file_actions` must be initialised and `path` must be a valid null-terminated C string.
|
/// `file_actions` must be initialised and `path` must be a valid
|
||||||
|
/// null-terminated C string.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn_file_actions_addchdir(
|
pub unsafe extern "C" fn posix_spawn_file_actions_addchdir(
|
||||||
file_actions: *mut posix_spawn_file_actions_t,
|
file_actions: *mut posix_spawn_file_actions_t,
|
||||||
@@ -181,41 +216,57 @@ pub unsafe extern "C" fn posix_spawn_file_actions_addchdir(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addfchdir.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_addfchdir.html>.
|
||||||
///
|
///
|
||||||
|
/// Adds a fchdir action to the object referenced by `file_actions` that shall
|
||||||
|
/// cause the working directory to be set to `fildes` (as if `fchdir(fildes)`
|
||||||
|
/// had been called) when a new process is spawned using this file actions
|
||||||
|
/// object.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `file_actions` must be initialised.
|
/// `file_actions` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn_file_actions_addfchdir(
|
pub unsafe extern "C" fn posix_spawn_file_actions_addfchdir(
|
||||||
file_actions: *mut posix_spawn_file_actions_t,
|
file_actions: *mut posix_spawn_file_actions_t,
|
||||||
fd: c_int,
|
fildes: c_int,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
||||||
if fd < 0 {
|
if fildes < 0 {
|
||||||
return EBADF;
|
return EBADF;
|
||||||
}
|
}
|
||||||
file_actions.add_action(Action::FChdir(fd));
|
file_actions.add_action(Action::FChdir(fildes));
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_adddup2.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn_file_actions_adddup2.html>.
|
||||||
///
|
///
|
||||||
|
/// Adds a dup2 action to the object referenced by `file_actions` that shall
|
||||||
|
/// cause the file descriptor `fildes` to be duplicated as `newfildes` (as if
|
||||||
|
/// `dup2(fildes, newfildes)` had been called) when a new process is spawned
|
||||||
|
/// using this file actions object.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `file_actions` is `NULL`.
|
/// Panics if `file_actions` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `file_actions` must be initialised.
|
/// `file_actions` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn_file_actions_adddup2(
|
pub unsafe extern "C" fn posix_spawn_file_actions_adddup2(
|
||||||
file_actions: *mut posix_spawn_file_actions_t,
|
file_actions: *mut posix_spawn_file_actions_t,
|
||||||
fd: c_int,
|
fildes: c_int,
|
||||||
new: c_int,
|
newfildes: c_int,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
let file_actions = unsafe { file_actions.as_mut().expect("file_actions cannot be NULL") };
|
||||||
if fd < 0 || new < 0 {
|
if fildes < 0 || newfildes < 0 {
|
||||||
return EBADF;
|
return EBADF;
|
||||||
}
|
}
|
||||||
file_actions.add_action(Action::Dup2(fd, new));
|
file_actions.add_action(Action::Dup2(fildes, newfildes));
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|||||||
+43
-13
@@ -114,14 +114,29 @@ unsafe fn spawn(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawn.html>.
|
||||||
///
|
///
|
||||||
/// `argv` must **not** be `NULL` and must contain atleast the program name. `path` must also be **not** `NULL`. Failure to ensure any of this will result in a panic.
|
/// Creates a new process (child process) from the specified process image. The
|
||||||
|
/// `path` argument is a pathname that identifies the new process image file to
|
||||||
|
/// execute.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// Returns the process ID of the child process to the parent process, in the
|
||||||
/// `file_actions` and `attrp` must either be `NULL` or be pointers to properly initialised objects. Doing otherwise is undefined behaviour.
|
/// variable pointed to by a non-null `pid` argument, and shall return `0` as
|
||||||
|
/// the function return value. Upon error, an error number shall be returned
|
||||||
|
/// as the function return value.
|
||||||
///
|
///
|
||||||
/// `path` and the elements in `argv` must be a pointers to valid null-terminated character arrays. Failure to ensure any of this will result in undefined behaviour.
|
/// # Panics
|
||||||
|
/// `argv` must **not** be `NULL` and must contain atleast the program name.
|
||||||
|
/// `path` must also **not** be `NULL`. Failure to ensure any of this will
|
||||||
|
/// result in a panic.
|
||||||
|
///
|
||||||
|
/// # Safety
|
||||||
|
/// `file_actions` and `attrp` must either be `NULL` or be pointers to properly
|
||||||
|
/// initialised objects. Doing otherwise is undefined behaviour.
|
||||||
|
///
|
||||||
|
/// `path` and the elements in `argv` must be a pointers to valid
|
||||||
|
/// null-terminated character arrays. Failure to ensure any of this will result
|
||||||
|
/// in undefined behaviour.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawn(
|
pub unsafe extern "C" fn posix_spawn(
|
||||||
pid: *mut pid_t,
|
pid: *mut pid_t,
|
||||||
@@ -165,18 +180,33 @@ pub unsafe extern "C" fn posix_spawn(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnp.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnp.html>.
|
||||||
///
|
///
|
||||||
/// `argv` must **not** be `NULL` and must contain atleast the program name. `path` must also be **not** `NULL`. Failure to ensure any of this will result in a panic.
|
/// Creates a new process (child process) from the specified process image. The
|
||||||
|
/// `file` argument is used to construct a pathname that identifies the new
|
||||||
|
/// process image file.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// Returns the process ID of the child process to the parent process, in the
|
||||||
/// `file_actions` and `attrp` must either be `NULL` or be pointers to properly initialised objects. Doing otherwise is undefined behaviour.
|
/// variable pointed to by a non-null `pid` argument, and shall return `0` as
|
||||||
|
/// the function return value. Upon error, an error number shall be returned
|
||||||
|
/// as the function return value.
|
||||||
///
|
///
|
||||||
/// `path` and the elements in `argv` must be a pointers to valid null-terminated character arrays. Failure to ensure any of this will result in undefined behaviour.
|
/// # Panics
|
||||||
|
/// `argv` must **not** be `NULL` and must contain atleast the program name.
|
||||||
|
/// `file` must also **not** be `NULL`. Failure to ensure any of this will
|
||||||
|
/// result in a panic.
|
||||||
|
///
|
||||||
|
/// # Safety
|
||||||
|
/// `file_actions` and `attrp` must either be `NULL` or be pointers to properly
|
||||||
|
/// initialised objects. Doing otherwise is undefined behaviour.
|
||||||
|
///
|
||||||
|
/// `file` and the elements in `argv` must be a pointers to valid
|
||||||
|
/// null-terminated character arrays. Failure to ensure any of this will result
|
||||||
|
/// in undefined behaviour.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnp(
|
pub unsafe extern "C" fn posix_spawnp(
|
||||||
pid: *mut pid_t,
|
pid: *mut pid_t,
|
||||||
path: *const c_char,
|
file: *const c_char,
|
||||||
file_actions: *const posix_spawn_file_actions_t,
|
file_actions: *const posix_spawn_file_actions_t,
|
||||||
attrp: *const posix_spawnattr_t,
|
attrp: *const posix_spawnattr_t,
|
||||||
argv: *const *mut c_char,
|
argv: *const *mut c_char,
|
||||||
@@ -194,9 +224,9 @@ pub unsafe extern "C" fn posix_spawnp(
|
|||||||
};
|
};
|
||||||
let envp = unsafe { NulTerminated::new(envp) };
|
let envp = unsafe { NulTerminated::new(envp) };
|
||||||
let program = unsafe {
|
let program = unsafe {
|
||||||
CStr::from_ptr(path)
|
CStr::from_ptr(file)
|
||||||
.to_str()
|
.to_str()
|
||||||
.expect("path cannot be NULL")
|
.expect("file cannot be NULL")
|
||||||
.to_string()
|
.to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+130
-30
@@ -31,6 +31,7 @@ pub const POSIX_SPAWN_SETSIGMASK: c_short = 4;
|
|||||||
pub const POSIX_SPAWN_SETSCHEDPARAM: c_short = 5;
|
pub const POSIX_SPAWN_SETSCHEDPARAM: c_short = 5;
|
||||||
pub const POSIX_SPAWN_SETSCHEDULER: c_short = 6;
|
pub const POSIX_SPAWN_SETSCHEDULER: c_short = 6;
|
||||||
|
|
||||||
|
/// A spawn attributes object.
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct posix_spawnattr_t {
|
pub struct posix_spawnattr_t {
|
||||||
pub param: sched_param,
|
pub param: sched_param,
|
||||||
@@ -41,9 +42,15 @@ pub struct posix_spawnattr_t {
|
|||||||
pub sigmask: sigset_t,
|
pub sigmask: sigset_t,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_init.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_init.html>.
|
||||||
///
|
///
|
||||||
/// Panics is `attr` is `NULL`.
|
/// Initializes a spawn attributes object `attr` with a default value for all
|
||||||
|
/// the individual attributes used by the implementation.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// Panics if `attr` is `NULL`.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub extern "C" fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> c_int {
|
pub extern "C" fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> c_int {
|
||||||
unsafe {
|
unsafe {
|
||||||
@@ -53,60 +60,89 @@ pub extern "C" fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> c_int {
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_destroy.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_destroy.html>.
|
||||||
///
|
///
|
||||||
/// Panics is `attr` is `NULL`.
|
/// Destroys a spawn attributes object.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
/// `attr` must be a pointer to `posix_spawnattr_t` and must at least be initialised.
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// Panics if `attr` is `NULL`.
|
||||||
|
///
|
||||||
|
/// # Safety
|
||||||
|
/// `attr` must be a pointer to `posix_spawnattr_t` and must at least be
|
||||||
|
/// initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_destroy(attr: *mut posix_spawnattr_t) -> c_int {
|
pub unsafe extern "C" fn posix_spawnattr_destroy(attr: *mut posix_spawnattr_t) -> c_int {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
// TODO should we be returning EINVAL when `attr` is invalid?
|
||||||
let attr = attr.as_mut().expect("posix_spawnattr_t cannot be NULL");
|
let attr = attr.as_mut().expect("posix_spawnattr_t cannot be NULL");
|
||||||
*attr = zeroed();
|
*attr = zeroed();
|
||||||
}
|
}
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setschedparam.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setschedparam.html>.
|
||||||
///
|
///
|
||||||
|
/// Sets the spawn-schedparam attribute in an initialized attributes object
|
||||||
|
/// referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `schedparam` is `NULL`.
|
/// Panics if `attr` or `schedparam` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_setschedparam(
|
pub unsafe extern "C" fn posix_spawnattr_setschedparam(
|
||||||
attr: *mut posix_spawnattr_t,
|
attr: *mut posix_spawnattr_t,
|
||||||
schedparam: *const sched_param,
|
schedparam: *const sched_param,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
|
// TODO should we be returning EINVAL when `attr` is invalid?
|
||||||
let attr = unsafe { attr.as_mut().expect("posix_spawnattr_t cannot be NULL") };
|
let attr = unsafe { attr.as_mut().expect("posix_spawnattr_t cannot be NULL") };
|
||||||
let schedparam = unsafe { schedparam.as_ref().expect("schedparam cannot be NULL") };
|
let schedparam = unsafe { schedparam.as_ref().expect("schedparam cannot be NULL") };
|
||||||
attr.param = *schedparam;
|
attr.param = *schedparam;
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getschedparam.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getschedparam.html>.
|
||||||
///
|
///
|
||||||
|
/// Obtains the value of the spawn-schedparam attribute from the attributes
|
||||||
|
/// object referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0` and stores the value of the spawn-schedparam
|
||||||
|
/// attribute of `attr` into the object referenced by `schedparam`. Upon
|
||||||
|
/// failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `schedparam` is `NULL`.
|
/// Panics if `attr` or `schedparam` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_getschedparam(
|
pub unsafe extern "C" fn posix_spawnattr_getschedparam(
|
||||||
attr: *const posix_spawnattr_t,
|
attr: *const posix_spawnattr_t,
|
||||||
schedparam: *mut sched_param,
|
schedparam: *mut sched_param,
|
||||||
) -> c_int {
|
) -> c_int {
|
||||||
|
// TODO should we be returning EINVAL when `attr` is invalid?
|
||||||
let attr = unsafe { attr.as_ref().expect("posix_spawnattr_t cannot be NULL") };
|
let attr = unsafe { attr.as_ref().expect("posix_spawnattr_t cannot be NULL") };
|
||||||
let schedparam = unsafe { schedparam.as_mut().expect("schedparam cannot be NULL") };
|
let schedparam = unsafe { schedparam.as_mut().expect("schedparam cannot be NULL") };
|
||||||
*schedparam = attr.param;
|
*schedparam = attr.param;
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setschedpolicy.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setschedpolicy.html>.
|
||||||
///
|
///
|
||||||
|
/// Sets the spawn-schedpolicy attribute in an initialized attributes object
|
||||||
|
/// referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` is `NULL`.
|
/// Panics if `attr` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_setschedpolicy(
|
pub unsafe extern "C" fn posix_spawnattr_setschedpolicy(
|
||||||
@@ -122,11 +158,19 @@ pub unsafe extern "C" fn posix_spawnattr_setschedpolicy(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getschedpolicy.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getschedpolicy.html>.
|
||||||
///
|
///
|
||||||
|
/// Obtains the value of the spawn-schedpolicy attribute from the attributes
|
||||||
|
/// object referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0` and stores the value of the spawn-schedpolicy
|
||||||
|
/// attribute of `attr` into the object referenced by `schedpolicy`. Upon
|
||||||
|
/// failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `schedpolicy` is `NULL`.
|
/// Panics if `attr` or `schedpolicy` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_getschedpolicy(
|
pub unsafe extern "C" fn posix_spawnattr_getschedpolicy(
|
||||||
@@ -139,11 +183,17 @@ pub unsafe extern "C" fn posix_spawnattr_getschedpolicy(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setsigdefault.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setsigdefault.html>.
|
||||||
///
|
///
|
||||||
|
/// Sets the spawn-sigdefault attribute in an initialized attributes object
|
||||||
|
/// referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `sigdefault` is `NULL`.
|
/// Panics if `attr` or `sigdefault` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_setsigdefault(
|
pub unsafe extern "C" fn posix_spawnattr_setsigdefault(
|
||||||
@@ -156,11 +206,19 @@ pub unsafe extern "C" fn posix_spawnattr_setsigdefault(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getsigdefault.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getsigdefault.html>.
|
||||||
///
|
///
|
||||||
|
/// Obtains the value of the spawn-sigdefault attribute from the attributes
|
||||||
|
/// object referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0` and stores the value of the spawn-sigdefault
|
||||||
|
/// attribute of `attr` into the object referenced by `sigdefault`. Upon
|
||||||
|
/// failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `sigdefault` is `NULL`.
|
/// Panics if `attr` or `sigdefault` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_getsigdefault(
|
pub unsafe extern "C" fn posix_spawnattr_getsigdefault(
|
||||||
@@ -173,11 +231,17 @@ pub unsafe extern "C" fn posix_spawnattr_getsigdefault(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setsigmask.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setsigmask.html>.
|
||||||
///
|
///
|
||||||
|
/// Sets the spawn-sigmask attribute in an initialized attributes object
|
||||||
|
/// referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `sigmask` is `NULL`.
|
/// Panics if `attr` or `sigmask` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_setsigmask(
|
pub unsafe extern "C" fn posix_spawnattr_setsigmask(
|
||||||
@@ -190,11 +254,19 @@ pub unsafe extern "C" fn posix_spawnattr_setsigmask(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getsigmask.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getsigmask.html>.
|
||||||
///
|
///
|
||||||
|
/// Obtains the value of the spawn-sigmask attribute from the attributes
|
||||||
|
/// object referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0` and stores the value of the spawn-sigmask
|
||||||
|
/// attribute of `attr` into the object referenced by `sigmask`. Upon
|
||||||
|
/// failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `sigmask` is `NULL`.
|
/// Panics if `attr` or `sigmask` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_getsigmask(
|
pub unsafe extern "C" fn posix_spawnattr_getsigmask(
|
||||||
@@ -207,11 +279,17 @@ pub unsafe extern "C" fn posix_spawnattr_getsigmask(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setflags.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setflags.html>.
|
||||||
///
|
///
|
||||||
|
/// Sets the spawn-flags attribute in an initialized attributes object
|
||||||
|
/// referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` is `NULL`.
|
/// Panics if `attr` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_setflags(
|
pub unsafe extern "C" fn posix_spawnattr_setflags(
|
||||||
@@ -229,11 +307,19 @@ pub unsafe extern "C" fn posix_spawnattr_setflags(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getflags.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getflags.html>.
|
||||||
///
|
///
|
||||||
|
/// Obtains the value of the spawn-flags attribute from the attributes
|
||||||
|
/// object referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0` and stores the value of the spawn-flags
|
||||||
|
/// attribute of `attr` into the object referenced by `flags`. Upon
|
||||||
|
/// failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `flags` is `NULL`.
|
/// Panics if `attr` or `flags` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_getflags(
|
pub unsafe extern "C" fn posix_spawnattr_getflags(
|
||||||
@@ -247,11 +333,17 @@ pub unsafe extern "C" fn posix_spawnattr_getflags(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setpgroup.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_setpgroup.html>.
|
||||||
///
|
///
|
||||||
|
/// Sets the spawn-pgroup attribute in an initialized attributes object
|
||||||
|
/// referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0`. Upon failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` is `NULL`.
|
/// Panics if `attr` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_setpgroup(
|
pub unsafe extern "C" fn posix_spawnattr_setpgroup(
|
||||||
@@ -263,11 +355,19 @@ pub unsafe extern "C" fn posix_spawnattr_setpgroup(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getpgroup.html>
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_spawnattr_getpgroup.html>.
|
||||||
///
|
///
|
||||||
|
/// Obtains the value of the spawn-pgroup attribute from the attributes
|
||||||
|
/// object referenced by `attr`.
|
||||||
|
///
|
||||||
|
/// Upon success, returns `0` and stores the value of the spawn-pgroup
|
||||||
|
/// attribute of `attr` into the object referenced by `pgroup`. Upon
|
||||||
|
/// failure, an error number is returned.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
/// Panics if `attr` or `pgroup` is `NULL`.
|
/// Panics if `attr` or `pgroup` is `NULL`.
|
||||||
///
|
///
|
||||||
/// # Safety:
|
/// # Safety
|
||||||
/// `attr` must be initialised.
|
/// `attr` must be initialised.
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn posix_spawnattr_getpgroup(
|
pub unsafe extern "C" fn posix_spawnattr_getpgroup(
|
||||||
|
|||||||
Reference in New Issue
Block a user