1 /* Internal definitions for posix_spawn functionality.
2    Copyright (C) 2000-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library 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 GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _SPAWN_INT_H
20 #define _SPAWN_INT_H
21 
22 #include <spawn.h>
23 #include <spawn_int_def.h>
24 #include <stdbool.h>
25 
26 /* Data structure to contain the action information.  */
27 struct __spawn_action
28 {
29   enum
30   {
31     spawn_do_close,
32     spawn_do_dup2,
33     spawn_do_open,
34     spawn_do_chdir,
35     spawn_do_fchdir,
36     spawn_do_closefrom,
37     spawn_do_tcsetpgrp
38   } tag;
39 
40   union
41   {
42     struct
43     {
44       int fd;
45     } close_action;
46     struct
47     {
48       int fd;
49       int newfd;
50     } dup2_action;
51     struct
52     {
53       int fd;
54       char *path;
55       int oflag;
56       mode_t mode;
57     } open_action;
58     struct
59     {
60       char *path;
61     } chdir_action;
62     struct
63     {
64       int fd;
65     } fchdir_action;
66     struct
67     {
68       int from;
69     } closefrom_action;
70     struct
71     {
72       int fd;
73     } setpgrp_action;
74   } action;
75 };
76 
77 #define SPAWN_XFLAGS_USE_PATH	0x1
78 #define SPAWN_XFLAGS_TRY_SHELL	0x2
79 
80 extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *
81 					       file_actions)
82      attribute_hidden;
83 
84 extern int __spawni (pid_t *pid, const char *path,
85 		     const posix_spawn_file_actions_t *file_actions,
86 		     const posix_spawnattr_t *attrp, char *const argv[],
87 		     char *const envp[], int xflags) attribute_hidden;
88 
89 /* Return true if FD falls into the range valid for file descriptors.
90    The check in this form is mandated by POSIX.  */
91 bool __spawn_valid_fd (int fd) attribute_hidden;
92 
93 #endif /* _SPAWN_INT_H */
94