posix_spawn: add closefrom non-portable action
Namely posix_spawn_file_actions_addclosefrom_np, in the form it is provided by glibc. Reviewed by: kevans, ngie (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D33143
This commit is contained in:
parent
bd44dce5b3
commit
a18ddf7757
@ -92,6 +92,8 @@ int posix_spawn_file_actions_addchdir_np(posix_spawn_file_actions_t *
|
||||
__restrict, const char * __restrict);
|
||||
int posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *,
|
||||
int);
|
||||
int posix_spawn_file_actions_addclosefrom_np(posix_spawn_file_actions_t *,
|
||||
int);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -437,6 +437,7 @@ FBSD_1.6 {
|
||||
|
||||
FBSD_1.7 {
|
||||
posix_spawn_file_actions_addchdir_np;
|
||||
posix_spawn_file_actions_addclosefrom_np;
|
||||
posix_spawn_file_actions_addfchdir_np;
|
||||
sched_getaffinity;
|
||||
sched_setaffinity;
|
||||
|
@ -68,6 +68,7 @@ typedef struct __posix_spawn_file_actions_entry {
|
||||
FAE_CLOSE,
|
||||
FAE_CHDIR,
|
||||
FAE_FCHDIR,
|
||||
FAE_CLOSEFROM,
|
||||
} fae_action;
|
||||
|
||||
int fae_fildes;
|
||||
@ -190,6 +191,9 @@ process_file_actions_entry(posix_spawn_file_actions_entry_t *fae)
|
||||
if (fchdir(fae->fae_fildes) != 0)
|
||||
return (errno);
|
||||
break;
|
||||
case FAE_CLOSEFROM:
|
||||
closefrom(fae->fae_fildes);
|
||||
break;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
@ -533,6 +537,27 @@ posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *__restrict fa,
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
posix_spawn_file_actions_addclosefrom_np (posix_spawn_file_actions_t *
|
||||
__restrict fa, int from)
|
||||
{
|
||||
posix_spawn_file_actions_entry_t *fae;
|
||||
|
||||
if (from < 0)
|
||||
return (EBADF);
|
||||
|
||||
/* Allocate object */
|
||||
fae = malloc(sizeof(posix_spawn_file_actions_entry_t));
|
||||
if (fae == NULL)
|
||||
return (errno);
|
||||
|
||||
fae->fae_action = FAE_CLOSEFROM;
|
||||
fae->fae_fildes = from;
|
||||
|
||||
STAILQ_INSERT_TAIL(&(*fa)->fa_list, fae, fae_list);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Spawn attributes
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user