1 /* Definitions for POSIX spawn interface.
2    Copyright (C) 2000, 2003-2004, 2008-2012 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9 
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17 
18 #ifndef _@GUARD_PREFIX@_SPAWN_H
19 
20 #if __GNUC__ >= 3
21 @PRAGMA_SYSTEM_HEADER@
22 #endif
23 @PRAGMA_COLUMNS@
24 
25 /* The include_next requires a split double-inclusion guard.  */
26 #if @HAVE_SPAWN_H@
27 # @INCLUDE_NEXT@ @NEXT_SPAWN_H@
28 #endif
29 
30 #ifndef _@GUARD_PREFIX@_SPAWN_H
31 #define _@GUARD_PREFIX@_SPAWN_H
32 
33 /* Get definitions of 'struct sched_param' and 'sigset_t'.
34    But avoid namespace pollution on glibc systems.  */
35 #if !(defined __GLIBC__ && !defined __UCLIBC__)
36 # include <sched.h>
37 # include <signal.h>
38 #endif
39 
40 #include <sys/types.h>
41 
42 #ifndef __THROW
43 # define __THROW
44 #endif
45 
46 /* GCC 2.95 and later have "__restrict"; C99 compilers have
47    "restrict", and "configure" may have defined "restrict".
48    Other compilers use __restrict, __restrict__, and _Restrict, and
49    'configure' might #define 'restrict' to those words, so pick a
50    different name.  */
51 #ifndef _Restrict_
52 # if 199901L <= __STDC_VERSION__
53 #  define _Restrict_ restrict
54 # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
55 #  define _Restrict_ __restrict
56 # else
57 #  define _Restrict_
58 # endif
59 #endif
60 /* gcc 3.1 and up support the [restrict] syntax.  Don't trust
61    sys/cdefs.h's definition of __restrict_arr, though, as it
62    mishandles gcc -ansi -pedantic.  */
63 #ifndef _Restrict_arr_
64 # if ((199901L <= __STDC_VERSION__                                      \
65        || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))     \
66            && !defined __STRICT_ANSI__))                                        \
67       && !defined __GNUG__)
68 #  define _Restrict_arr_ _Restrict_
69 # else
70 #  define _Restrict_arr_
71 # endif
72 #endif
73 
74 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
75 
76 /* The definition of _GL_ARG_NONNULL is copied here.  */
77 
78 /* The definition of _GL_WARN_ON_USE is copied here.  */
79 
80 
81 /* Data structure to contain attributes for thread creation.  */
82 #if @REPLACE_POSIX_SPAWN@
83 # define posix_spawnattr_t rpl_posix_spawnattr_t
84 #endif
85 #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@
86 # if !GNULIB_defined_posix_spawnattr_t
87 typedef struct
88 {
89   short int _flags;
90   pid_t _pgrp;
91   sigset_t _sd;
92   sigset_t _ss;
93   struct sched_param _sp;
94   int _policy;
95   int __pad[16];
96 } posix_spawnattr_t;
97 #  define GNULIB_defined_posix_spawnattr_t 1
98 # endif
99 #endif
100 
101 
102 /* Data structure to contain information about the actions to be
103    performed in the new process with respect to file descriptors.  */
104 #if @REPLACE_POSIX_SPAWN@
105 # define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t
106 #endif
107 #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
108 # if !GNULIB_defined_posix_spawn_file_actions_t
109 typedef struct
110 {
111   int _allocated;
112   int _used;
113   struct __spawn_action *_actions;
114   int __pad[16];
115 } posix_spawn_file_actions_t;
116 #  define GNULIB_defined_posix_spawn_file_actions_t 1
117 # endif
118 #endif
119 
120 
121 /* Flags to be set in the 'posix_spawnattr_t'.  */
122 #if @HAVE_POSIX_SPAWN@
123 /* Use the values from the system, but provide the missing ones.  */
124 # ifndef POSIX_SPAWN_SETSCHEDPARAM
125 #  define POSIX_SPAWN_SETSCHEDPARAM 0
126 # endif
127 # ifndef POSIX_SPAWN_SETSCHEDULER
128 #  define POSIX_SPAWN_SETSCHEDULER 0
129 # endif
130 #else
131 # if @REPLACE_POSIX_SPAWN@
132 /* Use the values from the system, for better compatibility.  */
133 /* But this implementation does not support AIX extensions.  */
134 #  undef POSIX_SPAWN_FORK_HANDLERS
135 # else
136 #  define POSIX_SPAWN_RESETIDS           0x01
137 #  define POSIX_SPAWN_SETPGROUP          0x02
138 #  define POSIX_SPAWN_SETSIGDEF          0x04
139 #  define POSIX_SPAWN_SETSIGMASK         0x08
140 #  define POSIX_SPAWN_SETSCHEDPARAM      0x10
141 #  define POSIX_SPAWN_SETSCHEDULER       0x20
142 # endif
143 #endif
144 /* A GNU extension.  Use the next free bit position.  */
145 #define POSIX_SPAWN_USEVFORK \
146   ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1)                     \
147     | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1)                 \
148     | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1)                 \
149     | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1)               \
150     | POSIX_SPAWN_SETSCHEDPARAM                                           \
151     | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \
152     | POSIX_SPAWN_SETSCHEDULER                                            \
153     | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0))  \
154    + 1)
155 #if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
156 typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
157             [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
158                 | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK
159                 | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)
160                & POSIX_SPAWN_USEVFORK)
161               == 0)
162              ? 1 : -1];
163 # define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1
164 #endif
165 
166 
167 #if @GNULIB_POSIX_SPAWN@
168 /* Spawn a new process executing PATH with the attributes describes in *ATTRP.
169    Before running the process perform the actions described in FILE-ACTIONS.
170 
171    This function is a possible cancellation points and therefore not
172    marked with __THROW. */
173 # if @REPLACE_POSIX_SPAWN@
174 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
175 #   define posix_spawn rpl_posix_spawn
176 #  endif
177 _GL_FUNCDECL_RPL (posix_spawn, int,
178                   (pid_t *_Restrict_ __pid,
179                    const char *_Restrict_ __path,
180                    const posix_spawn_file_actions_t *_Restrict_ __file_actions,
181                    const posix_spawnattr_t *_Restrict_ __attrp,
182                    char *const argv[_Restrict_arr_],
183                    char *const envp[_Restrict_arr_])
184                   _GL_ARG_NONNULL ((2, 5, 6)));
185 _GL_CXXALIAS_RPL (posix_spawn, int,
186                   (pid_t *_Restrict_ __pid,
187                    const char *_Restrict_ __path,
188                    const posix_spawn_file_actions_t *_Restrict_ __file_actions,
189                    const posix_spawnattr_t *_Restrict_ __attrp,
190                    char *const argv[_Restrict_arr_],
191                    char *const envp[_Restrict_arr_]));
192 # else
193 #  if !@HAVE_POSIX_SPAWN@
194 _GL_FUNCDECL_SYS (posix_spawn, int,
195                   (pid_t *_Restrict_ __pid,
196                    const char *_Restrict_ __path,
197                    const posix_spawn_file_actions_t *_Restrict_ __file_actions,
198                    const posix_spawnattr_t *_Restrict_ __attrp,
199                    char *const argv[_Restrict_arr_],
200                    char *const envp[_Restrict_arr_])
201                   _GL_ARG_NONNULL ((2, 5, 6)));
202 #  endif
203 _GL_CXXALIAS_SYS (posix_spawn, int,
204                   (pid_t *_Restrict_ __pid,
205                    const char *_Restrict_ __path,
206                    const posix_spawn_file_actions_t *_Restrict_ __file_actions,
207                    const posix_spawnattr_t *_Restrict_ __attrp,
208                    char *const argv[_Restrict_arr_],
209                    char *const envp[_Restrict_arr_]));
210 # endif
211 _GL_CXXALIASWARN (posix_spawn);
212 #elif defined GNULIB_POSIXCHECK
213 # undef posix_spawn
214 # if HAVE_RAW_DECL_POSIX_SPAWN
215 _GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - "
216                  "use gnulib module posix_spawn for portability");
217 # endif
218 #endif
219 
220 #if @GNULIB_POSIX_SPAWNP@
221 /* Similar to 'posix_spawn' but search for FILE in the PATH.
222 
223    This function is a possible cancellation points and therefore not
224    marked with __THROW.  */
225 # if @REPLACE_POSIX_SPAWN@
226 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
227 #   define posix_spawnp rpl_posix_spawnp
228 #  endif
229 _GL_FUNCDECL_RPL (posix_spawnp, int,
230                   (pid_t *__pid, const char *__file,
231                    const posix_spawn_file_actions_t *__file_actions,
232                    const posix_spawnattr_t *__attrp,
233                    char *const argv[], char *const envp[])
234                   _GL_ARG_NONNULL ((2, 5, 6)));
235 _GL_CXXALIAS_RPL (posix_spawnp, int,
236                   (pid_t *__pid, const char *__file,
237                    const posix_spawn_file_actions_t *__file_actions,
238                    const posix_spawnattr_t *__attrp,
239                    char *const argv[], char *const envp[]));
240 # else
241 #  if !@HAVE_POSIX_SPAWN@
242 _GL_FUNCDECL_SYS (posix_spawnp, int,
243                   (pid_t *__pid, const char *__file,
244                    const posix_spawn_file_actions_t *__file_actions,
245                    const posix_spawnattr_t *__attrp,
246                    char *const argv[], char *const envp[])
247                   _GL_ARG_NONNULL ((2, 5, 6)));
248 #  endif
249 _GL_CXXALIAS_SYS (posix_spawnp, int,
250                   (pid_t *__pid, const char *__file,
251                    const posix_spawn_file_actions_t *__file_actions,
252                    const posix_spawnattr_t *__attrp,
253                    char *const argv[], char *const envp[]));
254 # endif
255 _GL_CXXALIASWARN (posix_spawnp);
256 #elif defined GNULIB_POSIXCHECK
257 # undef posix_spawnp
258 # if HAVE_RAW_DECL_POSIX_SPAWNP
259 _GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - "
260                  "use gnulib module posix_spawnp for portability");
261 # endif
262 #endif
263 
264 
265 #if @GNULIB_POSIX_SPAWNATTR_INIT@
266 /* Initialize data structure with attributes for 'spawn' to default values.  */
267 # if @REPLACE_POSIX_SPAWN@
268 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
269 #   define posix_spawnattr_init rpl_posix_spawnattr_init
270 #  endif
271 _GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
272                                              __THROW _GL_ARG_NONNULL ((1)));
273 _GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
274 # else
275 #  if !@HAVE_POSIX_SPAWN@
276 _GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
277                                              __THROW _GL_ARG_NONNULL ((1)));
278 #  endif
279 _GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
280 # endif
281 _GL_CXXALIASWARN (posix_spawnattr_init);
282 #elif defined GNULIB_POSIXCHECK
283 # undef posix_spawnattr_init
284 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT
285 _GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - "
286                  "use gnulib module posix_spawnattr_init for portability");
287 # endif
288 #endif
289 
290 #if @GNULIB_POSIX_SPAWNATTR_DESTROY@
291 /* Free resources associated with ATTR.  */
292 # if @REPLACE_POSIX_SPAWN@
293 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
294 #   define posix_spawnattr_destroy rpl_posix_spawnattr_destroy
295 #  endif
296 _GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
297                                                 __THROW _GL_ARG_NONNULL ((1)));
298 _GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
299 # else
300 #  if !@HAVE_POSIX_SPAWN@
301 _GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
302                                                 __THROW _GL_ARG_NONNULL ((1)));
303 #  endif
304 _GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
305 # endif
306 _GL_CXXALIASWARN (posix_spawnattr_destroy);
307 #elif defined GNULIB_POSIXCHECK
308 # undef posix_spawnattr_destroy
309 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY
310 _GL_WARN_ON_USE (posix_spawnattr_destroy,
311                  "posix_spawnattr_destroy is unportable - "
312                  "use gnulib module posix_spawnattr_destroy for portability");
313 # endif
314 #endif
315 
316 #if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
317 /* Store signal mask for signals with default handling from ATTR in
318    SIGDEFAULT.  */
319 # if @REPLACE_POSIX_SPAWN@
320 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
321 #   define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault
322 #  endif
323 _GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int,
324                   (const posix_spawnattr_t *_Restrict_ __attr,
325                    sigset_t *_Restrict_ __sigdefault)
326                   __THROW _GL_ARG_NONNULL ((1, 2)));
327 _GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int,
328                   (const posix_spawnattr_t *_Restrict_ __attr,
329                    sigset_t *_Restrict_ __sigdefault));
330 # else
331 #  if !@HAVE_POSIX_SPAWN@
332 _GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int,
333                   (const posix_spawnattr_t *_Restrict_ __attr,
334                    sigset_t *_Restrict_ __sigdefault)
335                   __THROW _GL_ARG_NONNULL ((1, 2)));
336 #  endif
337 _GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int,
338                   (const posix_spawnattr_t *_Restrict_ __attr,
339                    sigset_t *_Restrict_ __sigdefault));
340 # endif
341 _GL_CXXALIASWARN (posix_spawnattr_getsigdefault);
342 #elif defined GNULIB_POSIXCHECK
343 # undef posix_spawnattr_getsigdefault
344 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT
345 _GL_WARN_ON_USE (posix_spawnattr_getsigdefault,
346                  "posix_spawnattr_getsigdefault is unportable - "
347                  "use gnulib module posix_spawnattr_getsigdefault for portability");
348 # endif
349 #endif
350 
351 #if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
352 /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
353 # if @REPLACE_POSIX_SPAWN@
354 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
355 #   define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault
356 #  endif
357 _GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int,
358                   (posix_spawnattr_t *_Restrict_ __attr,
359                    const sigset_t *_Restrict_ __sigdefault)
360                   __THROW _GL_ARG_NONNULL ((1, 2)));
361 _GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int,
362                   (posix_spawnattr_t *_Restrict_ __attr,
363                    const sigset_t *_Restrict_ __sigdefault));
364 # else
365 #  if !@HAVE_POSIX_SPAWN@
366 _GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int,
367                   (posix_spawnattr_t *_Restrict_ __attr,
368                    const sigset_t *_Restrict_ __sigdefault)
369                   __THROW _GL_ARG_NONNULL ((1, 2)));
370 #  endif
371 _GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int,
372                   (posix_spawnattr_t *_Restrict_ __attr,
373                    const sigset_t *_Restrict_ __sigdefault));
374 # endif
375 _GL_CXXALIASWARN (posix_spawnattr_setsigdefault);
376 #elif defined GNULIB_POSIXCHECK
377 # undef posix_spawnattr_setsigdefault
378 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT
379 _GL_WARN_ON_USE (posix_spawnattr_setsigdefault,
380                  "posix_spawnattr_setsigdefault is unportable - "
381                  "use gnulib module posix_spawnattr_setsigdefault for portability");
382 # endif
383 #endif
384 
385 #if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
386 /* Store signal mask for the new process from ATTR in SIGMASK.  */
387 # if @REPLACE_POSIX_SPAWN@
388 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
389 #   define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask
390 #  endif
391 _GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int,
392                   (const posix_spawnattr_t *_Restrict_ __attr,
393                    sigset_t *_Restrict_ __sigmask)
394                   __THROW _GL_ARG_NONNULL ((1, 2)));
395 _GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int,
396                   (const posix_spawnattr_t *_Restrict_ __attr,
397                    sigset_t *_Restrict_ __sigmask));
398 # else
399 #  if !@HAVE_POSIX_SPAWN@
400 _GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int,
401                   (const posix_spawnattr_t *_Restrict_ __attr,
402                    sigset_t *_Restrict_ __sigmask)
403                   __THROW _GL_ARG_NONNULL ((1, 2)));
404 #  endif
405 _GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int,
406                   (const posix_spawnattr_t *_Restrict_ __attr,
407                    sigset_t *_Restrict_ __sigmask));
408 # endif
409 _GL_CXXALIASWARN (posix_spawnattr_getsigmask);
410 #elif defined GNULIB_POSIXCHECK
411 # undef posix_spawnattr_getsigmask
412 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK
413 _GL_WARN_ON_USE (posix_spawnattr_getsigmask,
414                  "posix_spawnattr_getsigmask is unportable - "
415                  "use gnulib module posix_spawnattr_getsigmask for portability");
416 # endif
417 #endif
418 
419 #if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
420 /* Set signal mask for the new process in ATTR to SIGMASK.  */
421 # if @REPLACE_POSIX_SPAWN@
422 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
423 #   define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask
424 #  endif
425 _GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int,
426                   (posix_spawnattr_t *_Restrict_ __attr,
427                    const sigset_t *_Restrict_ __sigmask)
428                   __THROW _GL_ARG_NONNULL ((1, 2)));
429 _GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int,
430                   (posix_spawnattr_t *_Restrict_ __attr,
431                    const sigset_t *_Restrict_ __sigmask));
432 # else
433 #  if !@HAVE_POSIX_SPAWN@
434 _GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int,
435                   (posix_spawnattr_t *_Restrict_ __attr,
436                    const sigset_t *_Restrict_ __sigmask)
437                   __THROW _GL_ARG_NONNULL ((1, 2)));
438 #  endif
439 _GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int,
440                   (posix_spawnattr_t *_Restrict_ __attr,
441                    const sigset_t *_Restrict_ __sigmask));
442 # endif
443 _GL_CXXALIASWARN (posix_spawnattr_setsigmask);
444 #elif defined GNULIB_POSIXCHECK
445 # undef posix_spawnattr_setsigmask
446 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK
447 _GL_WARN_ON_USE (posix_spawnattr_setsigmask,
448                  "posix_spawnattr_setsigmask is unportable - "
449                  "use gnulib module posix_spawnattr_setsigmask for portability");
450 # endif
451 #endif
452 
453 #if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
454 /* Get flag word from the attribute structure.  */
455 # if @REPLACE_POSIX_SPAWN@
456 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
457 #   define posix_spawnattr_getflags rpl_posix_spawnattr_getflags
458 #  endif
459 _GL_FUNCDECL_RPL (posix_spawnattr_getflags, int,
460                   (const posix_spawnattr_t *_Restrict_ __attr,
461                    short int *_Restrict_ __flags)
462                   __THROW _GL_ARG_NONNULL ((1, 2)));
463 _GL_CXXALIAS_RPL (posix_spawnattr_getflags, int,
464                   (const posix_spawnattr_t *_Restrict_ __attr,
465                    short int *_Restrict_ __flags));
466 # else
467 #  if !@HAVE_POSIX_SPAWN@
468 _GL_FUNCDECL_SYS (posix_spawnattr_getflags, int,
469                   (const posix_spawnattr_t *_Restrict_ __attr,
470                    short int *_Restrict_ __flags)
471                   __THROW _GL_ARG_NONNULL ((1, 2)));
472 #  endif
473 _GL_CXXALIAS_SYS (posix_spawnattr_getflags, int,
474                   (const posix_spawnattr_t *_Restrict_ __attr,
475                    short int *_Restrict_ __flags));
476 # endif
477 _GL_CXXALIASWARN (posix_spawnattr_getflags);
478 #elif defined GNULIB_POSIXCHECK
479 # undef posix_spawnattr_getflags
480 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS
481 _GL_WARN_ON_USE (posix_spawnattr_getflags,
482                  "posix_spawnattr_getflags is unportable - "
483                  "use gnulib module posix_spawnattr_getflags for portability");
484 # endif
485 #endif
486 
487 #if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
488 /* Store flags in the attribute structure.  */
489 # if @REPLACE_POSIX_SPAWN@
490 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
491 #   define posix_spawnattr_setflags rpl_posix_spawnattr_setflags
492 #  endif
493 _GL_FUNCDECL_RPL (posix_spawnattr_setflags, int,
494                   (posix_spawnattr_t *__attr, short int __flags)
495                   __THROW _GL_ARG_NONNULL ((1)));
496 _GL_CXXALIAS_RPL (posix_spawnattr_setflags, int,
497                   (posix_spawnattr_t *__attr, short int __flags));
498 # else
499 #  if !@HAVE_POSIX_SPAWN@
500 _GL_FUNCDECL_SYS (posix_spawnattr_setflags, int,
501                   (posix_spawnattr_t *__attr, short int __flags)
502                   __THROW _GL_ARG_NONNULL ((1)));
503 #  endif
504 _GL_CXXALIAS_SYS (posix_spawnattr_setflags, int,
505                   (posix_spawnattr_t *__attr, short int __flags));
506 # endif
507 _GL_CXXALIASWARN (posix_spawnattr_setflags);
508 #elif defined GNULIB_POSIXCHECK
509 # undef posix_spawnattr_setflags
510 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS
511 _GL_WARN_ON_USE (posix_spawnattr_setflags,
512                  "posix_spawnattr_setflags is unportable - "
513                  "use gnulib module posix_spawnattr_setflags for portability");
514 # endif
515 #endif
516 
517 #if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
518 /* Get process group ID from the attribute structure.  */
519 # if @REPLACE_POSIX_SPAWN@
520 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
521 #   define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup
522 #  endif
523 _GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int,
524                   (const posix_spawnattr_t *_Restrict_ __attr,
525                    pid_t *_Restrict_ __pgroup)
526                   __THROW _GL_ARG_NONNULL ((1, 2)));
527 _GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int,
528                   (const posix_spawnattr_t *_Restrict_ __attr,
529                    pid_t *_Restrict_ __pgroup));
530 # else
531 #  if !@HAVE_POSIX_SPAWN@
532 _GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int,
533                   (const posix_spawnattr_t *_Restrict_ __attr,
534                    pid_t *_Restrict_ __pgroup)
535                   __THROW _GL_ARG_NONNULL ((1, 2)));
536 #  endif
537 _GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int,
538                   (const posix_spawnattr_t *_Restrict_ __attr,
539                    pid_t *_Restrict_ __pgroup));
540 # endif
541 _GL_CXXALIASWARN (posix_spawnattr_getpgroup);
542 #elif defined GNULIB_POSIXCHECK
543 # undef posix_spawnattr_getpgroup
544 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP
545 _GL_WARN_ON_USE (posix_spawnattr_getpgroup,
546                  "posix_spawnattr_getpgroup is unportable - "
547                  "use gnulib module posix_spawnattr_getpgroup for portability");
548 # endif
549 #endif
550 
551 #if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
552 /* Store process group ID in the attribute structure.  */
553 # if @REPLACE_POSIX_SPAWN@
554 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
555 #   define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup
556 #  endif
557 _GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int,
558                   (posix_spawnattr_t *__attr, pid_t __pgroup)
559                   __THROW _GL_ARG_NONNULL ((1)));
560 _GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int,
561                   (posix_spawnattr_t *__attr, pid_t __pgroup));
562 # else
563 #  if !@HAVE_POSIX_SPAWN@
564 _GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int,
565                   (posix_spawnattr_t *__attr, pid_t __pgroup)
566                   __THROW _GL_ARG_NONNULL ((1)));
567 #  endif
568 _GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int,
569                   (posix_spawnattr_t *__attr, pid_t __pgroup));
570 # endif
571 _GL_CXXALIASWARN (posix_spawnattr_setpgroup);
572 #elif defined GNULIB_POSIXCHECK
573 # undef posix_spawnattr_setpgroup
574 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP
575 _GL_WARN_ON_USE (posix_spawnattr_setpgroup,
576                  "posix_spawnattr_setpgroup is unportable - "
577                  "use gnulib module posix_spawnattr_setpgroup for portability");
578 # endif
579 #endif
580 
581 #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
582 /* Get scheduling policy from the attribute structure.  */
583 # if @REPLACE_POSIX_SPAWN@
584 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
585 #   define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy
586 #  endif
587 _GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int,
588                   (const posix_spawnattr_t *_Restrict_ __attr,
589                    int *_Restrict_ __schedpolicy)
590                   __THROW _GL_ARG_NONNULL ((1, 2)));
591 _GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int,
592                   (const posix_spawnattr_t *_Restrict_ __attr,
593                    int *_Restrict_ __schedpolicy));
594 # else
595 #  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0
596 _GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int,
597                   (const posix_spawnattr_t *_Restrict_ __attr,
598                    int *_Restrict_ __schedpolicy)
599                   __THROW _GL_ARG_NONNULL ((1, 2)));
600 #  endif
601 _GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int,
602                   (const posix_spawnattr_t *_Restrict_ __attr,
603                    int *_Restrict_ __schedpolicy));
604 # endif
605 _GL_CXXALIASWARN (posix_spawnattr_getschedpolicy);
606 #elif defined GNULIB_POSIXCHECK
607 # undef posix_spawnattr_getschedpolicy
608 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY
609 _GL_WARN_ON_USE (posix_spawnattr_getschedpolicy,
610                  "posix_spawnattr_getschedpolicy is unportable - "
611                  "use gnulib module posix_spawnattr_getschedpolicy for portability");
612 # endif
613 #endif
614 
615 #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
616 /* Store scheduling policy in the attribute structure.  */
617 # if @REPLACE_POSIX_SPAWN@
618 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
619 #   define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy
620 #  endif
621 _GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int,
622                   (posix_spawnattr_t *__attr, int __schedpolicy)
623                   __THROW _GL_ARG_NONNULL ((1)));
624 _GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int,
625                   (posix_spawnattr_t *__attr, int __schedpolicy));
626 # else
627 #  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0
628 _GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int,
629                   (posix_spawnattr_t *__attr, int __schedpolicy)
630                   __THROW _GL_ARG_NONNULL ((1)));
631 #  endif
632 _GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int,
633                   (posix_spawnattr_t *__attr, int __schedpolicy));
634 # endif
635 _GL_CXXALIASWARN (posix_spawnattr_setschedpolicy);
636 #elif defined GNULIB_POSIXCHECK
637 # undef posix_spawnattr_setschedpolicy
638 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY
639 _GL_WARN_ON_USE (posix_spawnattr_setschedpolicy,
640                  "posix_spawnattr_setschedpolicy is unportable - "
641                  "use gnulib module posix_spawnattr_setschedpolicy for portability");
642 # endif
643 #endif
644 
645 #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
646 /* Get scheduling parameters from the attribute structure.  */
647 # if @REPLACE_POSIX_SPAWN@
648 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
649 #   define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam
650 #  endif
651 _GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int,
652                   (const posix_spawnattr_t *_Restrict_ __attr,
653                    struct sched_param *_Restrict_ __schedparam)
654                   __THROW _GL_ARG_NONNULL ((1, 2)));
655 _GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int,
656                   (const posix_spawnattr_t *_Restrict_ __attr,
657                    struct sched_param *_Restrict_ __schedparam));
658 # else
659 #  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0
660 _GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int,
661                   (const posix_spawnattr_t *_Restrict_ __attr,
662                    struct sched_param *_Restrict_ __schedparam)
663                   __THROW _GL_ARG_NONNULL ((1, 2)));
664 #  endif
665 _GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int,
666                   (const posix_spawnattr_t *_Restrict_ __attr,
667                    struct sched_param *_Restrict_ __schedparam));
668 # endif
669 _GL_CXXALIASWARN (posix_spawnattr_getschedparam);
670 #elif defined GNULIB_POSIXCHECK
671 # undef posix_spawnattr_getschedparam
672 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM
673 _GL_WARN_ON_USE (posix_spawnattr_getschedparam,
674                  "posix_spawnattr_getschedparam is unportable - "
675                  "use gnulib module posix_spawnattr_getschedparam for portability");
676 # endif
677 #endif
678 
679 #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
680 /* Store scheduling parameters in the attribute structure.  */
681 # if @REPLACE_POSIX_SPAWN@
682 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
683 #   define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam
684 #  endif
685 _GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int,
686                   (posix_spawnattr_t *_Restrict_ __attr,
687                    const struct sched_param *_Restrict_ __schedparam)
688                   __THROW _GL_ARG_NONNULL ((1, 2)));
689 _GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int,
690                   (posix_spawnattr_t *_Restrict_ __attr,
691                    const struct sched_param *_Restrict_ __schedparam));
692 # else
693 #  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0
694 _GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int,
695                   (posix_spawnattr_t *_Restrict_ __attr,
696                    const struct sched_param *_Restrict_ __schedparam)
697                   __THROW _GL_ARG_NONNULL ((1, 2)));
698 #  endif
699 _GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int,
700                   (posix_spawnattr_t *_Restrict_ __attr,
701                    const struct sched_param *_Restrict_ __schedparam));
702 # endif
703 _GL_CXXALIASWARN (posix_spawnattr_setschedparam);
704 #elif defined GNULIB_POSIXCHECK
705 # undef posix_spawnattr_setschedparam
706 # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM
707 _GL_WARN_ON_USE (posix_spawnattr_setschedparam,
708                  "posix_spawnattr_setschedparam is unportable - "
709                  "use gnulib module posix_spawnattr_setschedparam for portability");
710 # endif
711 #endif
712 
713 
714 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
715 /* Initialize data structure for file attribute for 'spawn' call.  */
716 # if @REPLACE_POSIX_SPAWN@
717 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
718 #   define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init
719 #  endif
720 _GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int,
721                   (posix_spawn_file_actions_t *__file_actions)
722                   __THROW _GL_ARG_NONNULL ((1)));
723 _GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int,
724                   (posix_spawn_file_actions_t *__file_actions));
725 # else
726 #  if !@HAVE_POSIX_SPAWN@
727 _GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int,
728                   (posix_spawn_file_actions_t *__file_actions)
729                   __THROW _GL_ARG_NONNULL ((1)));
730 #  endif
731 _GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int,
732                   (posix_spawn_file_actions_t *__file_actions));
733 # endif
734 _GL_CXXALIASWARN (posix_spawn_file_actions_init);
735 #elif defined GNULIB_POSIXCHECK
736 # undef posix_spawn_file_actions_init
737 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT
738 _GL_WARN_ON_USE (posix_spawn_file_actions_init,
739                  "posix_spawn_file_actions_init is unportable - "
740                  "use gnulib module posix_spawn_file_actions_init for portability");
741 # endif
742 #endif
743 
744 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
745 /* Free resources associated with FILE-ACTIONS.  */
746 # if @REPLACE_POSIX_SPAWN@
747 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
748 #   define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy
749 #  endif
750 _GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int,
751                   (posix_spawn_file_actions_t *__file_actions)
752                   __THROW _GL_ARG_NONNULL ((1)));
753 _GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int,
754                   (posix_spawn_file_actions_t *__file_actions));
755 # else
756 #  if !@HAVE_POSIX_SPAWN@
757 _GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int,
758                   (posix_spawn_file_actions_t *__file_actions)
759                   __THROW _GL_ARG_NONNULL ((1)));
760 #  endif
761 _GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int,
762                   (posix_spawn_file_actions_t *__file_actions));
763 # endif
764 _GL_CXXALIASWARN (posix_spawn_file_actions_destroy);
765 #elif defined GNULIB_POSIXCHECK
766 # undef posix_spawn_file_actions_destroy
767 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY
768 _GL_WARN_ON_USE (posix_spawn_file_actions_destroy,
769                  "posix_spawn_file_actions_destroy is unportable - "
770                  "use gnulib module posix_spawn_file_actions_destroy for portability");
771 # endif
772 #endif
773 
774 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
775 /* Add an action to FILE-ACTIONS which tells the implementation to call
776    'open' for the given file during the 'spawn' call.  */
777 # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
778 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
779 #   define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen
780 #  endif
781 _GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int,
782                   (posix_spawn_file_actions_t *_Restrict_ __file_actions,
783                    int __fd,
784                    const char *_Restrict_ __path, int __oflag, mode_t __mode)
785                   __THROW _GL_ARG_NONNULL ((1, 3)));
786 _GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int,
787                   (posix_spawn_file_actions_t *_Restrict_ __file_actions,
788                    int __fd,
789                    const char *_Restrict_ __path, int __oflag, mode_t __mode));
790 # else
791 #  if !@HAVE_POSIX_SPAWN@
792 _GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int,
793                   (posix_spawn_file_actions_t *_Restrict_ __file_actions,
794                    int __fd,
795                    const char *_Restrict_ __path, int __oflag, mode_t __mode)
796                   __THROW _GL_ARG_NONNULL ((1, 3)));
797 #  endif
798 _GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int,
799                   (posix_spawn_file_actions_t *_Restrict_ __file_actions,
800                    int __fd,
801                    const char *_Restrict_ __path, int __oflag, mode_t __mode));
802 # endif
803 _GL_CXXALIASWARN (posix_spawn_file_actions_addopen);
804 #elif defined GNULIB_POSIXCHECK
805 # undef posix_spawn_file_actions_addopen
806 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
807 _GL_WARN_ON_USE (posix_spawn_file_actions_addopen,
808                  "posix_spawn_file_actions_addopen is unportable - "
809                  "use gnulib module posix_spawn_file_actions_addopen for portability");
810 # endif
811 #endif
812 
813 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
814 /* Add an action to FILE-ACTIONS which tells the implementation to call
815    'close' for the given file descriptor during the 'spawn' call.  */
816 # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
817 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
818 #   define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose
819 #  endif
820 _GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int,
821                   (posix_spawn_file_actions_t *__file_actions, int __fd)
822                   __THROW _GL_ARG_NONNULL ((1)));
823 _GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int,
824                   (posix_spawn_file_actions_t *__file_actions, int __fd));
825 # else
826 #  if !@HAVE_POSIX_SPAWN@
827 _GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int,
828                   (posix_spawn_file_actions_t *__file_actions, int __fd)
829                   __THROW _GL_ARG_NONNULL ((1)));
830 #  endif
831 _GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int,
832                   (posix_spawn_file_actions_t *__file_actions, int __fd));
833 # endif
834 _GL_CXXALIASWARN (posix_spawn_file_actions_addclose);
835 #elif defined GNULIB_POSIXCHECK
836 # undef posix_spawn_file_actions_addclose
837 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
838 _GL_WARN_ON_USE (posix_spawn_file_actions_addclose,
839                  "posix_spawn_file_actions_addclose is unportable - "
840                  "use gnulib module posix_spawn_file_actions_addclose for portability");
841 # endif
842 #endif
843 
844 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
845 /* Add an action to FILE-ACTIONS which tells the implementation to call
846    'dup2' for the given file descriptors during the 'spawn' call.  */
847 # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
848 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
849 #   define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2
850 #  endif
851 _GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int,
852                   (posix_spawn_file_actions_t *__file_actions,
853                    int __fd, int __newfd)
854                   __THROW _GL_ARG_NONNULL ((1)));
855 _GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int,
856                   (posix_spawn_file_actions_t *__file_actions,
857                    int __fd, int __newfd));
858 # else
859 #  if !@HAVE_POSIX_SPAWN@
860 _GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int,
861                   (posix_spawn_file_actions_t *__file_actions,
862                    int __fd, int __newfd)
863                   __THROW _GL_ARG_NONNULL ((1)));
864 #  endif
865 _GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int,
866                   (posix_spawn_file_actions_t *__file_actions,
867                    int __fd, int __newfd));
868 # endif
869 _GL_CXXALIASWARN (posix_spawn_file_actions_adddup2);
870 #elif defined GNULIB_POSIXCHECK
871 # undef posix_spawn_file_actions_adddup2
872 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
873 _GL_WARN_ON_USE (posix_spawn_file_actions_adddup2,
874                  "posix_spawn_file_actions_adddup2 is unportable - "
875                  "use gnulib module posix_spawn_file_actions_adddup2 for portability");
876 # endif
877 #endif
878 
879 
880 #endif /* _@GUARD_PREFIX@_SPAWN_H */
881 #endif /* _@GUARD_PREFIX@_SPAWN_H */
882