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