[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