3 * Copyright 2012, 2013 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
26 #pragma GCC system_header
30 * Function calls for spawning child processes.
33 #include <sys/types.h> /* For _pid_t and pid_t. */
34 #include <stdint.h> /* For intptr_t. */
36 * Constants for cwait actions.
40 #define _WAIT_GRANDCHILD 1
43 #define WAIT_CHILD _WAIT_CHILD
44 #define WAIT_GRANDCHILD _WAIT_GRANDCHILD
45 #endif /* Not _NO_OLDNAMES */
48 * Mode constants for spawn functions.
53 #define _OLD_P_OVERLAY _P_OVERLAY
58 #define P_WAIT _P_WAIT
59 #define P_NOWAIT _P_NOWAIT
60 #define P_OVERLAY _P_OVERLAY
61 #define OLD_P_OVERLAY _OLD_P_OVERLAY
62 #define P_NOWAITO _P_NOWAITO
63 #define P_DETACH _P_DETACH
64 #endif /* Not _NO_OLDNAMES */
73 _CRTIMP void __cdecl __MINGW_NOTHROW _cexit(void);
74 _CRTIMP void __cdecl __MINGW_NOTHROW _c_exit(void);
76 _CRTIMP int __cdecl __MINGW_NOTHROW _cwait (int*, _pid_t, int);
78 _CRTIMP _pid_t __cdecl __MINGW_NOTHROW _getpid(void);
80 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execl (const char*, const char*, ...);
81 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execle (const char*, const char*, ...);
82 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execlp (const char*, const char*, ...);
83 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execlpe (const char*, const char*, ...);
84 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execv (const char*, const char* const*);
85 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execve (const char*, const char* const*, const char* const*);
86 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execvp (const char*, const char* const*);
87 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execvpe (const char*, const char* const*, const char* const*);
89 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnl (int, const char*, const char*, ...);
90 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnle (int, const char*, const char*, ...);
91 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnlp (int, const char*, const char*, ...);
92 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnlpe (int, const char*, const char*, ...);
93 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnv (int, const char*, const char* const*);
94 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnve (int, const char*, const char* const*, const char* const*);
95 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnvp (int, const char*, const char* const*);
96 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnvpe (int, const char*, const char* const*, const char* const*);
98 #ifndef _WPROCESS_DEFINED
99 /* Also in wchar.h - keep in sync */
100 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecl (const wchar_t*, const wchar_t*, ...);
101 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecle (const wchar_t*, const wchar_t*, ...);
102 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexeclp (const wchar_t*, const wchar_t*, ...);
103 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexeclpe (const wchar_t*, const wchar_t*, ...);
104 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecv (const wchar_t*, const wchar_t* const*);
105 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecve (const wchar_t*, const wchar_t* const*, const wchar_t* const*);
106 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecvp (const wchar_t*, const wchar_t* const*);
107 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecvpe (const wchar_t*, const wchar_t* const*, const wchar_t* const*);
109 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnl (int, const wchar_t*, const wchar_t*, ...);
110 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnle (int, const wchar_t*, const wchar_t*, ...);
111 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnlp (int, const wchar_t*, const wchar_t*, ...);
112 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnlpe (int, const wchar_t*, const wchar_t*, ...);
113 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnv (int, const wchar_t*, const wchar_t* const*);
114 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnve (int, const wchar_t*, const wchar_t* const*, const wchar_t* const*);
115 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnvp (int, const wchar_t*, const wchar_t* const*);
116 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnvpe (int, const wchar_t*, const wchar_t* const*, const wchar_t* const*);
118 #define _WPROCESS_DEFINED
122 * NOTE: Apparently _endthread calls CloseHandle on the handle of the thread,
123 * making for race conditions if you are not careful. Basically you have to
124 * make sure that no-one is going to do *anything* with the thread handle
125 * after the thread calls _endthread or returns from the thread function.
127 * NOTE: No old names for these functions. Use the underscore.
129 _CRTIMP unsigned long __cdecl __MINGW_NOTHROW
130 _beginthread (void (*)(void *), unsigned, void*);
131 _CRTIMP void __cdecl __MINGW_NOTHROW _endthread (void);
133 _CRTIMP unsigned long __cdecl __MINGW_NOTHROW
134 _beginthreadex (void *, unsigned, unsigned (__stdcall *) (void *),
135 void*, unsigned, unsigned*);
136 _CRTIMP void __cdecl __MINGW_NOTHROW _endthreadex (unsigned);
140 * Functions without the leading underscore, for portability. These functions
141 * live in liboldnames.a.
143 _CRTIMP int __cdecl __MINGW_NOTHROW cwait (int*, pid_t, int);
144 _CRTIMP pid_t __cdecl __MINGW_NOTHROW getpid (void);
146 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execl (const char*, const char*, ...);
147 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execle (const char*, const char*, ...);
148 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execlp (const char*, const char*, ...);
149 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execlpe (const char*, const char*,...);
150 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execv (const char*, const char* const*);
151 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execve (const char*, const char* const*, const char* const*);
152 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execvp (const char*, const char* const*);
153 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execvpe (const char*, const char* const*, const char* const*);
155 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnl (int, const char*, const char*, ...);
156 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnle (int, const char*, const char*, ...);
157 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnlp (int, const char*, const char*, ...);
158 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnlpe (int, const char*, const char*, ...);
159 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnv (int, const char*, const char* const*);
160 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnve (int, const char*, const char* const*, const char* const*);
161 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnvp (int, const char*, const char* const*);
162 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnvpe (int, const char*, const char* const*, const char* const*);
163 #endif /* Not _NO_OLDNAMES */
169 #endif /* Not RC_INVOKED */
171 #endif /* _PROCESS_H_ not defined */