annotate sources/patches/uClibc-posix_spawn.patch @ 1682:64316ca2bc9b

Remove redundant list assignment in ccwrap that screws up ordering and puts the -L entries in the wrong order.
author Rob Landley <rob@landley.net>
date Fri, 05 Sep 2014 23:54:01 -0500
parents 3413e8427702
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 Sabotage needs posix_spawn to bootstrap musl.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
2
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 diff -ruN uClibc/include/spawn.h uClibc.bak/include/spawn.h
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 --- uClibc/include/spawn.h 1969-12-31 18:00:00.000000000 -0600
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 +++ uClibc.bak/include/spawn.h 2013-07-11 00:04:24.024324269 -0500
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 @@ -0,0 +1,266 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
7 +/* Definitions for POSIX spawn interface.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
8 + Copyright (C) 2000,2003,2004,2009,2011,2012 Free Software Foundation, Inc.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 + This file is part of the GNU C Library.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 + The GNU C Library is free software; you can redistribute it and/or
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 + modify it under the terms of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 + License as published by the Free Software Foundation; either
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
14 + version 2.1 of the License, or (at your option) any later version.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 + The GNU C Library is distributed in the hope that it will be useful,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
17 + but WITHOUT ANY WARRANTY; without even the implied warranty of
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 + Lesser General Public License for more details.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 + You should have received a copy of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 + License along with the GNU C Library; if not, see
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 + <http://www.gnu.org/licenses/>. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 +#ifndef _SPAWN_H
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 +#define _SPAWN_H 1
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
27 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
28 +#include <errno.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 +#include <string.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 +#include <stdlib.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
32 +#include <features.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 +#include <sched.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 +#define __need_sigset_t
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 +#include <signal.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 +#include <sys/types.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
39 +/* Data structure to contain attributes for thread creation. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 +typedef struct {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
41 + short int __flags;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 + pid_t __pgrp;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 + sigset_t __sd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
44 + sigset_t __ss;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 + struct sched_param __sp;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
46 + int __policy;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
47 + int __pad[16];
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
48 +} posix_spawnattr_t;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
50 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
51 +/* Data structure to contain information about the actions to be
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
52 + performed in the new process with respect to file descriptors. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
53 +typedef struct {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
54 + int __allocated;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
55 + int __used;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
56 + struct __spawn_action *__actions;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
57 + int __pad[16];
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
58 +} posix_spawn_file_actions_t;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
59 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
60 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
61 +/* Flags to be set in the `posix_spawnattr_t'. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
62 +#define POSIX_SPAWN_RESETIDS 0x01
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
63 +#define POSIX_SPAWN_SETPGROUP 0x02
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
64 +#define POSIX_SPAWN_SETSIGDEF 0x04
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
65 +#define POSIX_SPAWN_SETSIGMASK 0x08
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
66 +#define POSIX_SPAWN_SETSCHEDPARAM 0x10
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
67 +#define POSIX_SPAWN_SETSCHEDULER 0x20
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
68 +#define POSIX_SPAWN_USEVFORK 0x40 /* GNU extension */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
69 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
70 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
71 +#define __POSIX_SPAWN_MASK (POSIX_SPAWN_RESETIDS \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
72 + | POSIX_SPAWN_SETPGROUP \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
73 + | POSIX_SPAWN_SETSIGDEF \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
74 + | POSIX_SPAWN_SETSIGMASK \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
75 + | POSIX_SPAWN_SETSCHEDPARAM \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
76 + | POSIX_SPAWN_SETSCHEDULER \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
77 + | POSIX_SPAWN_USEVFORK)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
78 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
79 +__BEGIN_DECLS
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
80 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
81 +/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
82 + Before running the process perform the actions described in FILE-ACTIONS.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
83 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
84 + This function is a possible cancellation point and therefore not
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
85 + marked with __THROW. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
86 +int posix_spawn(pid_t * __restrict pid, const char * __restrict path,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
87 + const posix_spawn_file_actions_t * __restrict file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
88 + const posix_spawnattr_t * __restrict attrp,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
89 + char * const argv[__restrict],
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
90 + char * const envp[__restrict]);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
91 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
92 +/* Similar to `posix_spawn' but search for FILE in the PATH.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
93 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
94 + This function is a possible cancellation point and therefore not
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
95 + marked with __THROW. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
96 +int posix_spawnp(pid_t *pid, const char *file,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
97 + const posix_spawn_file_actions_t *file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
98 + const posix_spawnattr_t *attrp,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
99 + char * const argv[], char * const envp[]);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
100 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
101 +/* Initialize data structure with attributes for `spawn' to default values. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
102 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
103 +posix_spawnattr_init(posix_spawnattr_t *attr)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
104 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
105 + memset(attr, 0, sizeof(*attr));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
106 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
107 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
108 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
109 +/* Free resources associated with ATTR. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
110 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
111 +posix_spawnattr_destroy(posix_spawnattr_t *attr)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
112 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
113 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
114 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
115 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
116 +/* Store signal mask for signals with default handling from ATTR in
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
117 + SIGDEFAULT. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
118 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
119 +posix_spawnattr_getsigdefault(const posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
120 + sigset_t *sigdefault)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
121 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
122 + memcpy(sigdefault, &attr->__sd, sizeof(sigset_t));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
123 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
124 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
125 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
126 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
127 +/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
128 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
129 +posix_spawnattr_setsigdefault(posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
130 + const sigset_t *sigdefault)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
131 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
132 + memcpy(&attr->__sd, sigdefault, sizeof(sigset_t));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
133 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
134 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
135 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
136 +/* Store signal mask for the new process from ATTR in SIGMASK. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
137 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
138 +posix_spawnattr_getsigmask(const posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
139 + sigset_t *sigmask)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
140 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
141 + memcpy(sigmask, &attr->__ss, sizeof(sigset_t));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
142 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
143 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
144 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
145 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
146 +/* Set signal mask for the new process in ATTR to SIGMASK. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
147 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
148 +posix_spawnattr_setsigmask(posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
149 + const sigset_t *sigmask)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
150 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
151 + memcpy(&attr->__ss, sigmask, sizeof(sigset_t));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
152 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
153 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
154 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
155 +/* Get flag word from the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
156 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
157 +posix_spawnattr_getflags(const posix_spawnattr_t *attr, short int *flags)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
158 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
159 + *flags = attr->__flags;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
160 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
161 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
162 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
163 +/* Store flags in the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
164 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
165 +posix_spawnattr_setflags(posix_spawnattr_t *attr, short int flags)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
166 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
167 + /* Check no invalid bits are set. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
168 + if (flags & ~__POSIX_SPAWN_MASK)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
169 + return EINVAL;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
170 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
171 + attr->__flags = flags;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
172 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
173 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
174 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
175 +/* Get process group ID from the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
176 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
177 +posix_spawnattr_getpgroup(const posix_spawnattr_t *attr, pid_t *pgroup)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
178 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
179 + *pgroup = attr->__pgrp;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
180 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
181 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
182 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
183 +/* Store process group ID in the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
184 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
185 +posix_spawnattr_setpgroup(posix_spawnattr_t *attr, pid_t pgroup)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
186 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
187 + attr->__pgrp = pgroup;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
188 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
189 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
190 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
191 +/* Get scheduling policy from the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
192 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
193 +posix_spawnattr_getschedpolicy(const posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
194 + int *schedpolicy)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
195 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
196 + *schedpolicy = attr->__policy;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
197 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
198 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
199 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
200 +/* Store scheduling policy in the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
201 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
202 +posix_spawnattr_setschedpolicy(posix_spawnattr_t *attr, int schedpolicy)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
203 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
204 + switch (schedpolicy) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
205 + case SCHED_OTHER:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
206 + case SCHED_FIFO:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
207 + case SCHED_RR:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
208 + break;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
209 + default:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
210 + return EINVAL;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
211 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
212 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
213 + attr->__policy = schedpolicy;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
214 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
215 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
216 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
217 +/* Get scheduling parameters from the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
218 +static inline int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
219 +posix_spawnattr_getschedparam(const posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
220 + struct sched_param *schedparam)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
221 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
222 + memcpy(schedparam, &attr->__sp, sizeof(attr->__sp));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
223 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
224 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
225 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
226 +/* Store scheduling parameters in the attribute structure. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
227 +static inline int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
228 +posix_spawnattr_setschedparam(posix_spawnattr_t *attr,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
229 + const struct sched_param *schedparam)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
230 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
231 + attr->__sp = *schedparam;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
232 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
233 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
234 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
235 +/* Initialize data structure for file attribute for `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
236 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
237 +posix_spawn_file_actions_init(posix_spawn_file_actions_t *file_actions)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
238 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
239 + memset(file_actions, 0, sizeof(*file_actions));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
240 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
241 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
242 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
243 +/* Free resources associated with FILE-ACTIONS. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
244 +inline static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
245 +posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *file_actions)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
246 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
247 + free(file_actions->__actions);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
248 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
249 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
250 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
251 +/* Add an action to FILE-ACTIONS which tells the implementation to call
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
252 + `open' for the given file during the `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
253 +int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t * __restrict
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
254 + file_actions, int fd,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
255 + const char * __restrict path,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
256 + int oflag, mode_t mode)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
257 + __THROW;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
258 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
259 +/* Add an action to FILE-ACTIONS which tells the implementation to call
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
260 + `close' for the given file descriptor during the `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
261 +int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
262 + int fd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
263 + __THROW;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
264 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
265 +/* Add an action to FILE-ACTIONS which tells the implementation to call
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
266 + `dup2' for the given file descriptors during the `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
267 +int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
268 + int fd, int newfd) __THROW;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
269 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
270 +__END_DECLS
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
271 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
272 +#endif /* spawn.h */
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
273 diff -ruN uClibc/libc/stdlib/spawn.c uClibc.bak/libc/stdlib/spawn.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
274 --- uClibc/libc/stdlib/spawn.c 1969-12-31 18:00:00.000000000 -0600
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
275 +++ uClibc.bak/libc/stdlib/spawn.c 2013-07-10 21:48:33.191984555 -0500
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
276 @@ -0,0 +1,259 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
277 +/* Copyright (C) 2000, 2011 Free Software Foundation, Inc.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
278 + This file is part of the GNU C Library.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
279 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
280 + The GNU C Library is free software; you can redistribute it and/or
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
281 + modify it under the terms of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
282 + License as published by the Free Software Foundation; either
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
283 + version 2.1 of the License, or (at your option) any later version.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
284 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
285 + The GNU C Library is distributed in the hope that it will be useful,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
286 + but WITHOUT ANY WARRANTY; without even the implied warranty of
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
287 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
288 + Lesser General Public License for more details.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
289 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
290 + You should have received a copy of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
291 + License along with the GNU C Library; if not, see
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
292 + <http://www.gnu.org/licenses/>. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
293 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
294 +#include <errno.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
295 +#include <alloca.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
296 +#include <unistd.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
297 +#include <signal.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
298 +#include <stdbool.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
299 +#include <fcntl.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
300 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
301 +#include <sys/resource.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
302 +#include <not-cancel.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
303 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
304 +#include <spawn.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
305 +#include "spawn_int.h"
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
306 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
307 +/* The Unix standard contains a long explanation of the way to signal
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
308 + an error after the fork() was successful. Since no new wait status
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
309 + was wanted there is no way to signal an error using one of the
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
310 + available methods. The committee chose to signal an error by a
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
311 + normal program exit with the exit code 127. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
312 +#define SPAWN_ERROR 127
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
313 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
314 +/* Execute file actions.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
315 + * Returns true on error.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
316 + */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
317 +inline static bool execute_file_actions(const posix_spawn_file_actions_t *fa)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
318 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
319 + struct rlimit64 fdlimit;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
320 + bool have_fdlimit = false;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
321 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
322 + for (int cnt = 0; cnt < fa->__used; ++cnt) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
323 + struct __spawn_action *action = &fa->__actions[cnt];
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
324 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
325 + switch (action->tag) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
326 + case spawn_do_close:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
327 + if (close_not_cancel(action->action.close_action.fd) != 0) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
328 + if (!have_fdlimit) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
329 + getrlimit64(RLIMIT_NOFILE, &fdlimit);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
330 + have_fdlimit = true;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
331 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
332 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
333 + /* Only signal errors for file descriptors out of range. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
334 + if (0 > action->action.close_action.fd
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
335 + || action->action.close_action.fd >= fdlimit.rlim_cur)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
336 + /* Signal the error. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
337 + return true;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
338 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
339 + break;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
340 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
341 + case spawn_do_open:;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
342 + int new_fd = open_not_cancel(action->action.open_action.path,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
343 + action->action.open_action.oflag
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
344 + | O_LARGEFILE,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
345 + action->action.open_action.mode);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
346 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
347 + if (new_fd == -1)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
348 + return true;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
349 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
350 + /* Make sure the desired file descriptor is used. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
351 + if (new_fd != action->action.open_action.fd) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
352 + if (dup2(new_fd, action->action.open_action.fd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
353 + != action->action.open_action.fd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
354 + return true;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
355 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
356 + if (close_not_cancel(new_fd) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
357 + return true;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
358 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
359 + break;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
360 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
361 + case spawn_do_dup2:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
362 + if (dup2(action->action.dup2_action.fd,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
363 + action->action.dup2_action.newfd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
364 + != action->action.dup2_action.newfd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
365 + return true;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
366 + break;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
367 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
368 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
369 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
370 + return false;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
371 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
372 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
373 +#define DANGEROUS (POSIX_SPAWN_SETSIGMASK \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
374 + | POSIX_SPAWN_SETSIGDEF \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
375 + | POSIX_SPAWN_SETSCHEDPARAM \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
376 + | POSIX_SPAWN_SETSCHEDULER \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
377 + | POSIX_SPAWN_SETPGROUP \
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
378 + | POSIX_SPAWN_RESETIDS)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
379 +inline static bool is_vfork_safe(short int flags)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
380 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
381 + return ((flags & POSIX_SPAWN_USEVFORK) || !(flags & DANGEROUS));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
382 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
383 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
384 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
385 +/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
386 + Before running the process perform the actions described in FILE-ACTIONS. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
387 +static int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
388 +__spawni(pid_t *pid, const char *file,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
389 + const posix_spawn_file_actions_t *fa,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
390 + const posix_spawnattr_t *attrp, char *const argv[],
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
391 + char *const envp[], const char *path)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
392 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
393 + short int flags = attrp ? attrp->__flags : 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
394 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
395 + pid_t new_pid;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
396 + if (is_vfork_safe(flags) && !fa)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
397 + new_pid = vfork();
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
398 + else
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
399 + new_pid = fork();
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
400 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
401 + if (new_pid) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
402 + if (new_pid < 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
403 + return errno;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
404 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
405 + if (pid)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
406 + *pid = new_pid;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
407 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
408 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
409 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
410 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
411 + if (flags & POSIX_SPAWN_SETSIGMASK) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
412 + if (sigprocmask(SIG_SETMASK, &attrp->__ss, NULL) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
413 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
414 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
415 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
416 + if (flags & POSIX_SPAWN_SETSIGDEF) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
417 + /* We have to iterate over all signals. This could possibly be
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
418 + done better but it requires system specific solutions since
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
419 + the sigset_t data type can be very different on different
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
420 + architectures. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
421 + struct sigaction sa;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
422 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
423 + memset(&sa, 0, sizeof(sa));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
424 + sa.sa_handler = SIG_DFL;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
425 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
426 + for (int sig = 1; sig <= _NSIG; ++sig) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
427 + if (sigismember(&attrp->__sd, sig)) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
428 + if (sigaction(sig, &sa, NULL) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
429 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
430 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
431 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
432 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
433 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
434 + if (flags & POSIX_SPAWN_SETSCHEDULER) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
435 + if (sched_setscheduler(0, attrp->__policy, &attrp->__sp) == -1)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
436 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
437 + } else if (flags & POSIX_SPAWN_SETSCHEDPARAM) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
438 + if (sched_setparam(0, &attrp->__sp) == -1)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
439 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
440 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
441 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
442 + if (flags & POSIX_SPAWN_SETPGROUP) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
443 + if (setpgid(0, attrp->__pgrp) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
444 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
445 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
446 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
447 + if (flags & POSIX_SPAWN_RESETIDS) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
448 + if (seteuid(getuid()) || setegid(getgid()))
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
449 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
450 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
451 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
452 + if (fa && execute_file_actions(fa))
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
453 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
454 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
455 + if (!path || strchr(file, '/')) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
456 + execve(file, argv, envp);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
457 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
458 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
459 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
460 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
461 + char *name;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
462 + {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
463 + size_t filelen = strlen(file) + 1;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
464 + size_t pathlen = strlen(path) + 1;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
465 + name = alloca(pathlen + filelen);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
466 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
467 + /* Copy the file name at the top. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
468 + name = (char *) memcpy(name + pathlen, file, filelen);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
469 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
470 + /* And add the slash. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
471 + *--name = '/';
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
472 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
473 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
474 + char *p;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
475 + do {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
476 + char *startp;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
477 + p = strchrnul(path, ':');
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
478 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
479 + /* Two adjacent colons, or a colon at the beginning or the end
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
480 + of `PATH' means to search the current directory. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
481 + if (p == path)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
482 + startp = name + 1;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
483 + else
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
484 + startp = (char *) memcpy(name - (p - path), path, p - path);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
485 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
486 + execve(startp, argv, envp);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
487 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
488 + switch (errno) {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
489 + case EACCES:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
490 + case ENOENT:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
491 + case ESTALE:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
492 + case ENOTDIR:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
493 + /* Those errors indicate the file is missing or not
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
494 + executable by us, in which case we want to just try
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
495 + the next path directory. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
496 + break;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
497 + default:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
498 + /* Some other error means we found an executable file,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
499 + but something went wrong executing it; return the
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
500 + error to our caller. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
501 + goto error;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
502 + }
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
503 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
504 + path = p;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
505 + } while (*p++ != '\0');
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
506 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
507 +error:
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
508 + _exit(SPAWN_ERROR);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
509 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
510 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
511 +/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
512 + Before running the process perform the actions described in FILE-ACTIONS. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
513 +int posix_spawn (pid_t *pid, const char *path,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
514 + const posix_spawn_file_actions_t *fa,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
515 + const posix_spawnattr_t *attrp, char *const argv[],
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
516 + char *const envp[])
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
517 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
518 + return __spawni(pid, path, fa, attrp, argv, envp, NULL);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
519 +}
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
520 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
521 +/* Spawn a new process executing FILE with the attributes describes in *ATTRP.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
522 + Before running the process perform the actions described in FILE-ACTIONS. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
523 +int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
524 +posix_spawnp(pid_t *pid, const char *file,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
525 + const posix_spawn_file_actions_t *fa,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
526 + const posix_spawnattr_t *attrp, char *const argv[],
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
527 + char *const envp[])
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
528 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
529 + const char *path = getenv("PATH");
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
530 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
531 + if (!path)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
532 + path = ":/bin:/usr/bin";
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
533 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
534 + return __spawni(pid, file, fa, attrp, argv, envp, path);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
535 +}
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
536 diff -ruN uClibc/libc/stdlib/spawn_faction_addclose.c uClibc.bak/libc/stdlib/spawn_faction_addclose.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
537 --- uClibc/libc/stdlib/spawn_faction_addclose.c 1969-12-31 18:00:00.000000000 -0600
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
538 +++ uClibc.bak/libc/stdlib/spawn_faction_addclose.c 2013-07-10 21:48:33.191984555 -0500
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
539 @@ -0,0 +1,51 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
540 +/* Copyright (C) 2000 Free Software Foundation, Inc.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
541 + This file is part of the GNU C Library.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
542 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
543 + The GNU C Library is free software; you can redistribute it and/or
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
544 + modify it under the terms of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
545 + License as published by the Free Software Foundation; either
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
546 + version 2.1 of the License, or (at your option) any later version.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
547 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
548 + The GNU C Library is distributed in the hope that it will be useful,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
549 + but WITHOUT ANY WARRANTY; without even the implied warranty of
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
550 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
551 + Lesser General Public License for more details.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
552 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
553 + You should have received a copy of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
554 + License along with the GNU C Library; if not, see
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
555 + <http://www.gnu.org/licenses/>. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
556 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
557 +#include <errno.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
558 +#include <spawn.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
559 +#include <unistd.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
560 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
561 +#include "spawn_int.h"
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
562 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
563 +/* Add an action to FILE-ACTIONS which tells the implementation to call
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
564 + `close' for the given file descriptor during the `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
565 +int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
566 +posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
567 + int fd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
568 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
569 + int maxfd = sysconf(_SC_OPEN_MAX);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
570 + struct __spawn_action *rec;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
571 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
572 + /* Test for the validity of the file descriptor. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
573 + if (fd < 0 || fd >= maxfd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
574 + return EBADF;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
575 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
576 + /* Allocate more memory if needed. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
577 + if (file_actions->__used == file_actions->__allocated
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
578 + && __posix_spawn_file_actions_realloc(file_actions) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
579 + /* This can only mean we ran out of memory. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
580 + return ENOMEM;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
581 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
582 + /* Add the new value. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
583 + rec = &file_actions->__actions[file_actions->__used];
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
584 + rec->tag = spawn_do_close;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
585 + rec->action.open_action.fd = fd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
586 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
587 + /* Account for the new entry. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
588 + ++file_actions->__used;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
589 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
590 +}
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
591 diff -ruN uClibc/libc/stdlib/spawn_faction_adddup2.c uClibc.bak/libc/stdlib/spawn_faction_adddup2.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
592 --- uClibc/libc/stdlib/spawn_faction_adddup2.c 1969-12-31 18:00:00.000000000 -0600
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
593 +++ uClibc.bak/libc/stdlib/spawn_faction_adddup2.c 2013-07-10 21:48:33.219984556 -0500
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
594 @@ -0,0 +1,52 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
595 +/* Copyright (C) 2000 Free Software Foundation, Inc.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
596 + This file is part of the GNU C Library.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
597 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
598 + The GNU C Library is free software; you can redistribute it and/or
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
599 + modify it under the terms of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
600 + License as published by the Free Software Foundation; either
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
601 + version 2.1 of the License, or (at your option) any later version.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
602 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
603 + The GNU C Library is distributed in the hope that it will be useful,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
604 + but WITHOUT ANY WARRANTY; without even the implied warranty of
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
605 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
606 + Lesser General Public License for more details.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
607 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
608 + You should have received a copy of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
609 + License along with the GNU C Library; if not, see
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
610 + <http://www.gnu.org/licenses/>. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
611 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
612 +#include <errno.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
613 +#include <spawn.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
614 +#include <unistd.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
615 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
616 +#include "spawn_int.h"
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
617 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
618 +/* Add an action to FILE-ACTIONS which tells the implementation to call
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
619 + `dup2' for the given file descriptors during the `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
620 +int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
621 +posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
622 + int fd, int newfd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
623 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
624 + int maxfd = sysconf(_SC_OPEN_MAX);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
625 + struct __spawn_action *rec;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
626 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
627 + /* Test for the validity of the file descriptor. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
628 + if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
629 + return EBADF;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
630 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
631 + /* Allocate more memory if needed. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
632 + if (file_actions->__used == file_actions->__allocated
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
633 + && __posix_spawn_file_actions_realloc (file_actions) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
634 + /* This can only mean we ran out of memory. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
635 + return ENOMEM;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
636 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
637 + /* Add the new value. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
638 + rec = &file_actions->__actions[file_actions->__used];
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
639 + rec->tag = spawn_do_dup2;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
640 + rec->action.dup2_action.fd = fd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
641 + rec->action.dup2_action.newfd = newfd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
642 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
643 + /* Account for the new entry. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
644 + ++file_actions->__used;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
645 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
646 +}
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
647 diff -ruN uClibc/libc/stdlib/spawn_faction_addopen.c uClibc.bak/libc/stdlib/spawn_faction_addopen.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
648 --- uClibc/libc/stdlib/spawn_faction_addopen.c 1969-12-31 18:00:00.000000000 -0600
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
649 +++ uClibc.bak/libc/stdlib/spawn_faction_addopen.c 2013-07-10 21:48:33.219984556 -0500
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
650 @@ -0,0 +1,55 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
651 +/* Copyright (C) 2000 Free Software Foundation, Inc.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
652 + This file is part of the GNU C Library.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
653 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
654 + The GNU C Library is free software; you can redistribute it and/or
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
655 + modify it under the terms of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
656 + License as published by the Free Software Foundation; either
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
657 + version 2.1 of the License, or (at your option) any later version.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
658 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
659 + The GNU C Library is distributed in the hope that it will be useful,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
660 + but WITHOUT ANY WARRANTY; without even the implied warranty of
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
661 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
662 + Lesser General Public License for more details.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
663 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
664 + You should have received a copy of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
665 + License along with the GNU C Library; if not, see
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
666 + <http://www.gnu.org/licenses/>. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
667 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
668 +#include <errno.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
669 +#include <spawn.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
670 +#include <unistd.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
671 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
672 +#include "spawn_int.h"
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
673 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
674 +/* Add an action to FILE-ACTIONS which tells the implementation to call
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
675 + `open' for the given file during the `spawn' call. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
676 +int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
677 +posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *file_actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
678 + int fd, const char *path, int oflag,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
679 + mode_t mode)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
680 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
681 + int maxfd = sysconf(_SC_OPEN_MAX);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
682 + struct __spawn_action *rec;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
683 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
684 + /* Test for the validity of the file descriptor. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
685 + if (fd < 0 || fd >= maxfd)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
686 + return EBADF;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
687 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
688 + /* Allocate more memory if needed. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
689 + if (file_actions->__used == file_actions->__allocated
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
690 + && __posix_spawn_file_actions_realloc (file_actions) != 0)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
691 + /* This can only mean we ran out of memory. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
692 + return ENOMEM;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
693 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
694 + /* Add the new value. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
695 + rec = &file_actions->__actions[file_actions->__used];
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
696 + rec->tag = spawn_do_open;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
697 + rec->action.open_action.fd = fd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
698 + rec->action.open_action.path = path;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
699 + rec->action.open_action.oflag = oflag;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
700 + rec->action.open_action.mode = mode;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
701 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
702 + /* Account for the new entry. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
703 + ++file_actions->__used;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
704 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
705 +}
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
706 diff -ruN uClibc/libc/stdlib/spawn_faction_init.c uClibc.bak/libc/stdlib/spawn_faction_init.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
707 --- uClibc/libc/stdlib/spawn_faction_init.c 1969-12-31 18:00:00.000000000 -0600
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
708 +++ uClibc.bak/libc/stdlib/spawn_faction_init.c 2013-07-10 21:48:33.219984556 -0500
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
709 @@ -0,0 +1,42 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
710 +/* Copyright (C) 2000 Free Software Foundation, Inc.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
711 + This file is part of the GNU C Library.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
712 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
713 + The GNU C Library is free software; you can redistribute it and/or
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
714 + modify it under the terms of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
715 + License as published by the Free Software Foundation; either
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
716 + version 2.1 of the License, or (at your option) any later version.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
717 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
718 + The GNU C Library is distributed in the hope that it will be useful,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
719 + but WITHOUT ANY WARRANTY; without even the implied warranty of
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
720 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
721 + Lesser General Public License for more details.
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
722 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
723 + You should have received a copy of the GNU Lesser General Public
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
724 + License along with the GNU C Library; if not, see
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
725 + <http://www.gnu.org/licenses/>. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
726 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
727 +#include <errno.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
728 +#include <spawn.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
729 +#include <stdlib.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
730 +#include <string.h>
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
731 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
732 +#include "spawn_int.h"
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
733 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
734 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
735 +/* Function used to increase the size of the allocated array. This
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
736 + function is called from the `add'-functions. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
737 +int
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
738 +__posix_spawn_file_actions_realloc(posix_spawn_file_actions_t *file_actions)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
739 +{
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
740 + int newalloc = file_actions->__allocated + 8;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
741 + void *newmem = realloc(file_actions->__actions,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
742 + newalloc * sizeof(struct __spawn_action));
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
743 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
744 + if (newmem == NULL)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
745 + /* Not enough memory. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
746 + return ENOMEM;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
747 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
748 + file_actions->__actions = (struct __spawn_action *)newmem;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
749 + file_actions->__allocated = newalloc;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
750 + return 0;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
751 +}
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
752 diff -ruN uClibc/libc/stdlib/spawn_int.h uClibc.bak/libc/stdlib/spawn_int.h
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
753 --- uClibc/libc/stdlib/spawn_int.h 1969-12-31 18:00:00.000000000 -0600
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
754 +++ uClibc.bak/libc/stdlib/spawn_int.h 2013-07-10 21:48:33.219984556 -0500
1615
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
755 @@ -0,0 +1,26 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
756 +/* Data structure to contain the action information. */
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
757 +struct __spawn_action {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
758 + enum {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
759 + spawn_do_close,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
760 + spawn_do_dup2,
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
761 + spawn_do_open
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
762 + } tag;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
763 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
764 + union {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
765 + struct {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
766 + int fd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
767 + } close_action;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
768 + struct {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
769 + int fd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
770 + int newfd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
771 + } dup2_action;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
772 + struct {
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
773 + int fd;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
774 + const char *path;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
775 + int oflag;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
776 + mode_t mode;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
777 + } open_action;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
778 + } action;
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
779 +};
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
780 +
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
781 +int __posix_spawn_file_actions_realloc(posix_spawn_file_actions_t *fa);
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
782 diff -ruN uClibc/Makefile.in uClibc.bak/Makefile.in
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
783 --- uClibc/Makefile.in 2013-07-11 00:46:58.388430731 -0500
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
784 +++ uClibc.bak/Makefile.in 2013-07-10 21:48:33.187984555 -0500
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
785 @@ -293,6 +293,7 @@
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
786 HEADERS_RM-$(UCLIBC_SV4_DEPRECATED) += ustat.h sys/ustat.h bits/ustat.h
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
787 HEADERS_RM-$(UCLIBC_SUSV3_LEGACY) += sys/timeb.h regexp.h
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
788 HEADERS_RM-$(UCLIBC_SUSV4_LEGACY) += utime.h ucontext.h
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
789 +HEADERS_RM-$(UCLIBC_HAS_ADVANCED_REALTIME) += spawn.h
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
790
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
791 ifneq ($(findstring install,$(MAKECMDGOALS)),)
dad40f8a408d Add some stuff John Spencer needed so sabotage can bootstrap itself.
Rob Landley <rob@landley.net>
parents:
diff changeset
792 $(addprefix $(PREFIX)$(DEVEL_PREFIX),include $(MULTILIB_DIR)):
1619
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
793 --- uClibc.bak/libc/stdlib/Makefile.in 2012-05-15 02:20:09.000000000 -0500
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
794 +++ uClibc/libc/stdlib/Makefile.in 2013-08-23 05:07:07.219499583 -0500
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
795 @@ -62,6 +62,9 @@
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
796 CSRC-y += __cxa_atexit.c __cxa_finalize.c __exit_handler.c exit.c on_exit.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
797 CSRC-$(COMPAT_ATEXIT) += old_atexit.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
798
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
799 +CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += spawn.c spawn_faction_addclose.c \
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
800 + spawn_faction_adddup2.c spawn_faction_addopen.c spawn_faction_init.c
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
801 +
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
802 STDLIB_DIR := $(top_srcdir)libc/stdlib
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
803 STDLIB_OUT := $(top_builddir)libc/stdlib
3413e8427702 The lfs m4 build wasn't including -lrt when probing for posix_spawn, thus trying to recreate what was already there and causing a conflicting definition. Change patch to insert it into libc proper.
Rob Landley <rob@landley.net>
parents: 1615
diff changeset
804