1 /* Internal definitions for posix_spawn functionality. 2 Copyright (C) 2000-2021 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 } tag; 38 39 union 40 { 41 struct 42 { 43 int fd; 44 } close_action; 45 struct 46 { 47 int fd; 48 int newfd; 49 } dup2_action; 50 struct 51 { 52 int fd; 53 char *path; 54 int oflag; 55 mode_t mode; 56 } open_action; 57 struct 58 { 59 char *path; 60 } chdir_action; 61 struct 62 { 63 int fd; 64 } fchdir_action; 65 struct 66 { 67 int from; 68 } closefrom_action; 69 } action; 70 }; 71 72 #define SPAWN_XFLAGS_USE_PATH 0x1 73 #define SPAWN_XFLAGS_TRY_SHELL 0x2 74 75 extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t * 76 file_actions) 77 attribute_hidden; 78 79 extern int __spawni (pid_t *pid, const char *path, 80 const posix_spawn_file_actions_t *file_actions, 81 const posix_spawnattr_t *attrp, char *const argv[], 82 char *const envp[], int xflags) attribute_hidden; 83 84 /* Return true if FD falls into the range valid for file descriptors. 85 The check in this form is mandated by POSIX. */ 86 bool __spawn_valid_fd (int fd) attribute_hidden; 87 88 #endif /* _SPAWN_INT_H */ 89