Mercurial > hg > aboriginal
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 |
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 |