Static inline wont work on packages like gnulib
where it will generate its own spawn.h

Signed-off-by: Khem Raj <[email protected]>
---
 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

_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to