[PATCH] spawn: Expose posix_spwanattr_* functions
Khem Raj
raj.khem at gmail.com
Fri Apr 13 15:46:33 UTC 2012
Static inline wont work on packages like gnulib
where it will generate its own spawn.h
Signed-off-by: Khem Raj <raj.khem at gmail.com>
---
include/spawn.h | 155 ++++++++++++----------------------------------------
librt/spawn.c | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 195 insertions(+), 122 deletions(-)
diff --git a/include/spawn.h b/include/spawn.h
index 95fff35..1d96467 100644
--- a/include/spawn.h
+++ b/include/spawn.h
@@ -64,6 +64,8 @@ typedef struct
#define POSIX_SPAWN_SETSCHEDULER 0x20
#ifdef __USE_GNU
# define POSIX_SPAWN_USEVFORK 0x40
+#else
+# define POSIX_SPAWN_USEVFORK 0x00
#endif
@@ -73,7 +75,8 @@ typedef struct
| POSIX_SPAWN_SETSIGMASK \
| POSIX_SPAWN_SETSCHEDPARAM \
| POSIX_SPAWN_SETSCHEDULER \
- | POSIX_SPAWN_USEVFORK)
+ | POSIX_SPAWN_USEVFORK \
+ )
__BEGIN_DECLS
@@ -101,167 +104,75 @@ extern int posix_spawnp (pid_t *__pid, const char *__file,
/* 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;
-}
+extern int posix_spawnattr_init (posix_spawnattr_t *__attr);
/* Free resources associated with ATTR. */
-static inline
-int posix_spawnattr_destroy (posix_spawnattr_t *__attr)
-{
- return 0;
-}
+extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr);
/* Store signal mask for signals with default handling from ATTR in
SIGDEFAULT. */
-static inline
-int posix_spawnattr_getsigdefault (const posix_spawnattr_t *
+extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t *
__restrict __attr,
- sigset_t *__restrict __sigdefault)
-{
- memcpy (__sigdefault, &__attr->__sd, sizeof (sigset_t));
- return 0;
-}
+ sigset_t *__restrict __sigdefault);
/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */
-static inline
-int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr,
+extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr,
const sigset_t *__restrict
- __sigdefault)
-{
- memcpy (&__attr->__sd, __sigdefault, sizeof (sigset_t));
- return 0;
-}
+ __sigdefault);
/* Store signal mask for the new process from ATTR in SIGMASK. */
-static inline
-int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict
+extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict
__attr,
- sigset_t *__restrict __sigmask)
-{
- memcpy (__sigmask, &__attr->__ss, sizeof (sigset_t));
- return 0;
-}
+ sigset_t *__restrict __sigmask);
/* Set signal mask for the new process in ATTR to 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;
-}
+extern int posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr,
+ const sigset_t *__restrict __sigmask);
/* Get flag word from the attribute structure. */
-static inline
-int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict
+extern int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict
__attr,
- short int *__restrict __flags)
-{
- *__flags = __attr->__flags;
- return 0;
-}
+ short int *__restrict __flags);
/* Store flags in the attribute structure. */
-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;
-
- _attr->__flags = __flags;
- return 0;
-}
+extern int posix_spawnattr_setflags (posix_spawnattr_t *_attr,
+ short int __flags);
/* Get process group ID from the attribute structure. */
-static inline
-int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict
- __attr, pid_t *__restrict __pgroup)
-{
- *__pgroup = __attr->__pgrp;
- return 0;
-}
+extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict
+ __attr, pid_t *__restrict __pgroup);
/* Store process group ID in the attribute structure. */
-static inline
-int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
- pid_t __pgroup)
-{
- __attr->__pgrp = __pgroup;
- return 0;
-}
+extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
+ pid_t __pgroup);
/* Get scheduling policy from the attribute structure. */
-static inline
-int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *
+extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *
__restrict __attr,
- int *__restrict __schedpolicy)
-{
- *__schedpolicy = __attr->__policy;
- return 0;
-}
+ int *__restrict __schedpolicy);
/* Store scheduling policy in the attribute structure. */
-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;
-}
+extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr,
+ int __schedpolicy);
/* Get scheduling parameters from the attribute structure. */
-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;
-}
+ __schedparam);
/* Store scheduling parameters in the attribute structure. */
-static inline
-int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr,
+extern int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr,
const struct sched_param *
- __restrict __schedparam)
-{
- __attr->__sp = *__schedparam;
- return 0;
-}
+ __restrict __schedparam);
/* Initialize data structure for file attribute for `spawn' call. */
-static inline
-int posix_spawn_file_actions_init (posix_spawn_file_actions_t *
- __file_actions)
-{
- memset (__file_actions, 0, sizeof (*__file_actions));
- return 0;
-}
+extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *
+ __file_actions);
/* Free resources associated with FILE-ACTIONS. */
-static inline
-int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *
- __file_actions)
-{
- free (__file_actions->__actions);
- return 0;
-}
+extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *
+ __file_actions);
/* Add an action to FILE-ACTIONS which tells the implementation to call
`open' for the given file during the `spawn' call. */
diff --git a/librt/spawn.c b/librt/spawn.c
index 8a2b293..1a63266 100644
--- a/librt/spawn.c
+++ b/librt/spawn.c
@@ -263,3 +263,165 @@ posix_spawnp(pid_t *pid, const char *file,
return __spawni(pid, file, fa, attrp, argv, envp, path);
}
+/* Initialize data structure with attributes for `spawn' to default values. */
+int
+posix_spawnattr_init (posix_spawnattr_t *__attr)
+{
+ memset (__attr, 0, sizeof (*__attr));
+ return 0;
+}
+
+/* Free resources associated with ATTR. */
+int
+posix_spawnattr_destroy (posix_spawnattr_t *__attr)
+{
+ return 0;
+}
+
+/* Store signal mask for signals with default handling from ATTR in
+ SIGDEFAULT. */
+int
+posix_spawnattr_getsigdefault (const posix_spawnattr_t *
+ __restrict __attr,
+ sigset_t *__restrict __sigdefault)
+{
+ memcpy (__sigdefault, &__attr->__sd, sizeof (sigset_t));
+ return 0;
+}
+
+/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */
+int
+posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr,
+ const sigset_t *__restrict
+ __sigdefault)
+{
+ memcpy (&__attr->__sd, __sigdefault, sizeof (sigset_t));
+ return 0;
+}
+
+/* Store signal mask for the new process from ATTR in SIGMASK. */
+int
+posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict
+ __attr,
+ sigset_t *__restrict __sigmask)
+{
+ memcpy (__sigmask, &__attr->__ss, sizeof (sigset_t));
+ return 0;
+}
+
+/* Set signal mask for the new process in ATTR to SIGMASK. */
+int
+posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr,
+ const sigset_t *__restrict __sigmask)
+{
+ memcpy (&__attr->__ss, __sigmask, sizeof (sigset_t));
+ return 0;
+}
+
+/* Get flag word from the attribute structure. */
+int
+posix_spawnattr_getflags (const posix_spawnattr_t *__restrict
+ __attr,
+ short int *__restrict __flags)
+{
+ *__flags = __attr->__flags;
+ return 0;
+}
+
+/* Store flags in the attribute structure. */
+int
+posix_spawnattr_setflags (posix_spawnattr_t *_attr,
+ short int __flags)
+{
+ /* Check no invalid bits are set. */
+ if (__flags & ~__POSIX_SPAWN_MASK)
+ return EINVAL;
+
+ _attr->__flags = __flags;
+ return 0;
+}
+
+/* Get process group ID from the attribute structure. */
+int
+posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict
+ __attr, pid_t *__restrict __pgroup)
+{
+ *__pgroup = __attr->__pgrp;
+ return 0;
+}
+
+/* Store process group ID in the attribute structure. */
+int
+posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
+ pid_t __pgroup)
+{
+ __attr->__pgrp = __pgroup;
+ return 0;
+}
+
+/* Get scheduling policy from the attribute structure. */
+int
+posix_spawnattr_getschedpolicy (const posix_spawnattr_t *
+ __restrict __attr,
+ int *__restrict __schedpolicy)
+{
+ *__schedpolicy = __attr->__policy;
+ return 0;
+}
+
+/* Store scheduling policy in the attribute structure. */
+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;
+}
+
+/* Get scheduling parameters from the attribute structure. */
+int
+posix_spawnattr_getschedparam (const posix_spawnattr_t *
+ __restrict __attr,
+ struct sched_param *__restrict
+ __schedparam)
+{
+ memcpy (__schedparam, &__attr->__sp, sizeof (__attr->__sp));
+ return 0;
+}
+
+/* Store scheduling parameters in the attribute structure. */
+int
+posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr,
+ const struct sched_param *
+ __restrict __schedparam)
+{
+ __attr->__sp = *__schedparam;
+ return 0;
+}
+
+/* Initialize data structure for file attribute for `spawn' call. */
+int
+posix_spawn_file_actions_init (posix_spawn_file_actions_t *
+ __file_actions)
+{
+ memset (__file_actions, 0, sizeof (*__file_actions));
+ return 0;
+}
+
+/* Free resources associated with FILE-ACTIONS. */
+int
+posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *
+ __file_actions)
+{
+ free (__file_actions->__actions);
+ return 0;
+}
--
1.7.9.5
More information about the uClibc
mailing list