diff options
| -rw-r--r-- | include/spawn.h | 265 | 
1 files changed, 144 insertions, 121 deletions
diff --git a/include/spawn.h b/include/spawn.h index 8b07bb800..95fff356f 100644 --- a/include/spawn.h +++ b/include/spawn.h @@ -19,36 +19,39 @@  #ifndef	_SPAWN_H  #define	_SPAWN_H	1 -#include <errno.h> -#include <string.h> -#include <stdlib.h> -  #include <features.h>  #include <sched.h>  #define __need_sigset_t  #include <signal.h>  #include <sys/types.h> +/* For the tiny inlines (errno/free/memset).  */ +#include <errno.h> +#include <string.h> +#include <stdlib.h> +  /* Data structure to contain attributes for thread creation.  */ -typedef struct { -	short int __flags; -	pid_t __pgrp; -	sigset_t __sd; -	sigset_t __ss; -	struct sched_param __sp; -	int __policy; -	int __pad[16]; +typedef struct +{ +  short int __flags; +  pid_t __pgrp; +  sigset_t __sd; +  sigset_t __ss; +  struct sched_param __sp; +  int __policy; +  int __pad[16];  } posix_spawnattr_t;  /* Data structure to contain information about the actions to be     performed in the new process with respect to file descriptors.  */ -typedef struct { -	int __allocated; -	int __used; -	struct __spawn_action *__actions; -	int __pad[16]; +typedef struct +{ +  int __allocated; +  int __used; +  struct __spawn_action *__actions; +  int __pad[16];  } posix_spawn_file_actions_t; @@ -59,7 +62,9 @@ typedef struct {  #define POSIX_SPAWN_SETSIGMASK		0x08  #define POSIX_SPAWN_SETSCHEDPARAM	0x10  #define POSIX_SPAWN_SETSCHEDULER	0x20 -#define POSIX_SPAWN_USEVFORK		0x40 /* GNU extension */ +#ifdef __USE_GNU +# define POSIX_SPAWN_USEVFORK		0x40 +#endif  #define __POSIX_SPAWN_MASK (POSIX_SPAWN_RESETIDS		\ @@ -77,189 +82,207 @@ __BEGIN_DECLS     This function is a possible cancellation point and therefore not     marked with __THROW. */ -int posix_spawn(pid_t * restrict pid, const char * restrict path, -		const posix_spawn_file_actions_t * restrict file_actions, -		const posix_spawnattr_t * restrict attrp, -		char * const argv[restrict], -		char * const envp[restrict]); +extern int posix_spawn (pid_t *__restrict __pid, +			const char *__restrict __path, +			const posix_spawn_file_actions_t *__restrict +			__file_actions, +			const posix_spawnattr_t *__restrict __attrp, +			char *const __argv[__restrict_arr], +			char *const __envp[__restrict_arr]);  /* Similar to `posix_spawn' but search for FILE in the PATH.     This function is a possible cancellation point and therefore not     marked with __THROW.  */ -int posix_spawnp(pid_t *pid, const char *file, -		 const posix_spawn_file_actions_t *file_actions, -		 const posix_spawnattr_t *attrp, -		 char * const argv[], char * const envp[]); - -/* Initialize data structure with attributes for `spawn' to default values. */ -inline static int -posix_spawnattr_init(posix_spawnattr_t *attr) +extern int posix_spawnp (pid_t *__pid, const char *__file, +			 const posix_spawn_file_actions_t *__file_actions, +			 const posix_spawnattr_t *__attrp, +			 char *const __argv[], char *const __envp[]); + + +/* Initialize data structure with attributes for `spawn' to default values.  */ +static inline +int posix_spawnattr_init (posix_spawnattr_t *__attr)  { -	memset(attr, 0, sizeof(*attr)); -	return 0; +  memset (__attr, 0, sizeof (*__attr)); +  return 0;  }  /* Free resources associated with ATTR.  */ -inline static int -posix_spawnattr_destroy(posix_spawnattr_t *attr) +static inline +int posix_spawnattr_destroy (posix_spawnattr_t *__attr)  { -	return 0; +  return 0;  }  /* Store signal mask for signals with default handling from ATTR in     SIGDEFAULT.  */ -inline static int -posix_spawnattr_getsigdefault(const posix_spawnattr_t *attr, -			      sigset_t *sigdefault) +static inline +int posix_spawnattr_getsigdefault (const posix_spawnattr_t * +					  __restrict __attr, +					  sigset_t *__restrict __sigdefault)  { -	memcpy(sigdefault, &attr->__sd, sizeof(sigset_t)); -	return 0; +  memcpy (__sigdefault, &__attr->__sd, sizeof (sigset_t)); +  return 0;  } -  /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */ -inline static int -posix_spawnattr_setsigdefault(posix_spawnattr_t *attr, -			      const sigset_t *sigdefault) +static inline +int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr, +					  const sigset_t *__restrict +					  __sigdefault)  { -	memcpy(&attr->__sd, sigdefault, sizeof(sigset_t)); -	return 0; +  memcpy (&__attr->__sd, __sigdefault, sizeof (sigset_t)); +  return 0;  }  /* Store signal mask for the new process from ATTR in SIGMASK.  */ -inline static int -posix_spawnattr_getsigmask(const posix_spawnattr_t *attr, -			   sigset_t *sigmask) +static inline +int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict +				       __attr, +				       sigset_t *__restrict __sigmask)  { -	memcpy(sigmask, &attr->__ss, sizeof(sigset_t)); -	return 0; +  memcpy (__sigmask, &__attr->__ss, sizeof (sigset_t)); +  return 0;  } -  /* Set signal mask for the new process in ATTR to SIGMASK.  */ -inline static int -posix_spawnattr_setsigmask(posix_spawnattr_t *attr, -			   const sigset_t *sigmask) +static inline +int posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr, +				       const sigset_t *__restrict __sigmask)  { -	memcpy(&attr->__ss, sigmask, sizeof(sigset_t)); -	return 0; +  memcpy (&__attr->__ss, __sigmask, sizeof (sigset_t)); +  return 0;  }  /* Get flag word from the attribute structure.  */ -inline static int -posix_spawnattr_getflags(const posix_spawnattr_t *attr, short int *flags) +static inline +int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict +				     __attr, +				     short int *__restrict __flags)  { -	*flags = attr->__flags; -	return 0; +  *__flags = __attr->__flags; +  return 0;  }  /* Store flags in the attribute structure.  */ -inline static int -posix_spawnattr_setflags(posix_spawnattr_t *attr, short int flags) +static inline +int posix_spawnattr_setflags (posix_spawnattr_t *_attr, +				     short int __flags)  { -	/* Check no invalid bits are set.  */ -	if (flags & ~__POSIX_SPAWN_MASK) -		return EINVAL; +  /* Check no invalid bits are set.  */ +  if (__flags & ~__POSIX_SPAWN_MASK) +    return EINVAL; -	attr->__flags = flags; -	return 0; +  _attr->__flags = __flags; +  return 0;  }  /* Get process group ID from the attribute structure.  */ -inline static int -posix_spawnattr_getpgroup(const posix_spawnattr_t *attr, pid_t *pgroup) +static inline +int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict +				      __attr, pid_t *__restrict __pgroup)  { -	*pgroup = attr->__pgrp; -	return 0; +  *__pgroup = __attr->__pgrp; +  return 0;  }  /* Store process group ID in the attribute structure.  */ -inline static int -posix_spawnattr_setpgroup(posix_spawnattr_t *attr, pid_t pgroup) +static inline +int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr, +				      pid_t __pgroup)  { -	attr->__pgrp = pgroup; -	return 0; +  __attr->__pgrp = __pgroup; +  return 0;  }  /* Get scheduling policy from the attribute structure.  */ -inline static int -posix_spawnattr_getschedpolicy(const posix_spawnattr_t *attr, -			       int *schedpolicy) +static inline +int posix_spawnattr_getschedpolicy (const posix_spawnattr_t * +					   __restrict __attr, +					   int *__restrict __schedpolicy)  { -	*schedpolicy = attr->__policy; -	return 0; +  *__schedpolicy = __attr->__policy; +  return 0;  }  /* Store scheduling policy in the attribute structure.  */ -inline static int -posix_spawnattr_setschedpolicy(posix_spawnattr_t *attr, int schedpolicy) +static inline +int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr, +					   int __schedpolicy)  { -	switch (schedpolicy) { -	case SCHED_OTHER: -	case SCHED_FIFO: -	case SCHED_RR: -		break; -	default: -		return EINVAL; -	} - -	attr->__policy = schedpolicy; -	return 0; +  switch (__schedpolicy) { +  case SCHED_OTHER: +  case SCHED_FIFO: +  case SCHED_RR: +    break; +  default: +    return EINVAL; +  } + +  __attr->__policy = __schedpolicy; +  return 0;  }  /* Get scheduling parameters from the attribute structure.  */ -static inline int -posix_spawnattr_getschedparam(const posix_spawnattr_t *attr, -			      struct sched_param *schedparam) +static inline +int posix_spawnattr_getschedparam (const posix_spawnattr_t * +					  __restrict __attr, +					  struct sched_param *__restrict +					  __schedparam)  { -	memcpy(schedparam, &attr->__sp, sizeof(attr->__sp)); -	return 0; +  memcpy (__schedparam, &__attr->__sp, sizeof (__attr->__sp)); +  return 0;  }  /* Store scheduling parameters in the attribute structure.  */ -static inline int -posix_spawnattr_setschedparam(posix_spawnattr_t *attr, -			      const struct sched_param *schedparam) +static inline +int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr, +					  const struct sched_param * +					  __restrict __schedparam)  { -	attr->__sp = *schedparam; -	return 0; +  __attr->__sp = *__schedparam; +  return 0;  }  /* Initialize data structure for file attribute for `spawn' call.  */ -inline static int -posix_spawn_file_actions_init(posix_spawn_file_actions_t *file_actions) +static inline +int posix_spawn_file_actions_init (posix_spawn_file_actions_t * +					  __file_actions)  { -	memset(file_actions, 0, sizeof(*file_actions)); -	return 0; +  memset (__file_actions, 0, sizeof (*__file_actions)); +  return 0;  }  /* Free resources associated with FILE-ACTIONS.  */ -inline static int -posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *file_actions) +static inline +int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t * +					     __file_actions)  { -	free(file_actions->__actions); -	return 0; +  free (__file_actions->__actions); +  return 0;  }  /* Add an action to FILE-ACTIONS which tells the implementation to call     `open' for the given file during the `spawn' call.  */ -int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t * restrict -				     file_actions, int fd, -				     const char * restrict path, -				     int oflag, mode_t mode) +extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t * +					     __restrict __file_actions, +					     int __fd, +					     const char *__restrict __path, +					     int __oflag, mode_t __mode)       __THROW;  /* Add an action to FILE-ACTIONS which tells the implementation to call     `close' for the given file descriptor during the `spawn' call.  */ -int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *file_actions, -				      int fd) +extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t * +					      __file_actions, int __fd)       __THROW;  /* Add an action to FILE-ACTIONS which tells the implementation to call     `dup2' for the given file descriptors during the `spawn' call.  */ -int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *file_actions, -				     int fd, int newfd) __THROW; +extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t * +					     __file_actions, +					     int __fd, int __newfd) __THROW;  __END_DECLS  | 
