1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_PROCESS
7 #define _INC_PROCESS
8 
9 #include <crtdefs.h>
10 #include <corecrt_startup.h>
11 
12 /* Includes a definition of _pid_t and pid_t */
13 #include <sys/types.h>
14 
15 #ifndef _POSIX_
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 #ifndef _P_WAIT
21 #define _P_WAIT 0
22 #define _P_NOWAIT 1
23 #define _OLD_P_OVERLAY 2
24 #define _P_NOWAITO 3
25 #define _P_DETACH 4
26 #define _P_OVERLAY 2
27 
28 #define _WAIT_CHILD 0
29 #define _WAIT_GRANDCHILD 1
30 #endif
31 
32   typedef void (__cdecl *_beginthread_proc_type)(void *);
33   typedef unsigned (__stdcall *_beginthreadex_proc_type)(void *);
34 
35   _CRTIMP uintptr_t __cdecl _beginthread(_beginthread_proc_type _StartAddress,unsigned _StackSize,void *_ArgList);
36   _CRTIMP void __cdecl _endthread(void) __MINGW_ATTRIB_NORETURN;
37   _CRTIMP uintptr_t __cdecl _beginthreadex(void *_Security,unsigned _StackSize,_beginthreadex_proc_type _StartAddress,void *_ArgList,unsigned _InitFlag,unsigned *_ThrdAddr);
38   _CRTIMP void __cdecl _endthreadex(unsigned _Retval) __MINGW_ATTRIB_NORETURN;
39 
40 #ifndef _CRT_TERMINATE_DEFINED
41 #define _CRT_TERMINATE_DEFINED
42   void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
43   void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
44 #ifdef _UCRT
45   void __cdecl __MINGW_NOTHROW quick_exit(int _Code) __MINGW_ATTRIB_NORETURN;
46 #endif
47 
48 #if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
49   /* C99 function name */
50   void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN;
51 #ifndef __CRT__NO_INLINE
_Exit(int status)52   __CRT_INLINE __MINGW_ATTRIB_NORETURN void  __cdecl _Exit(int status)
53   {  _exit(status); }
54 #endif /* !__CRT__NO_INLINE */
55 #endif /* Not  __NO_ISOCEXT */
56 
57 #pragma push_macro("abort")
58 #undef abort
59   void __cdecl __MINGW_ATTRIB_NORETURN abort(void);
60 #pragma pop_macro("abort")
61 
62 #endif /* _CRT_TERMINATE_DEFINED */
63 
64   typedef void (__stdcall *_tls_callback_type)(void*,unsigned long,void*);
65   _CRTIMP void __cdecl _register_thread_local_exe_atexit_callback(_tls_callback_type callback);
66 
67   void __cdecl __MINGW_NOTHROW _cexit(void);
68   void __cdecl __MINGW_NOTHROW _c_exit(void);
69 #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
70   _CRTIMP int __cdecl _getpid(void);
71   _CRTIMP intptr_t __cdecl _cwait(int *_TermStat,intptr_t _ProcHandle,int _Action);
72   _CRTIMP intptr_t __cdecl _execl(const char *_Filename,const char *_ArgList,...);
73   _CRTIMP intptr_t __cdecl _execle(const char *_Filename,const char *_ArgList,...);
74   _CRTIMP intptr_t __cdecl _execlp(const char *_Filename,const char *_ArgList,...);
75   _CRTIMP intptr_t __cdecl _execlpe(const char *_Filename,const char *_ArgList,...);
76   _CRTIMP intptr_t __cdecl _execv(const char *_Filename,const char *const *_ArgList);
77   _CRTIMP intptr_t __cdecl _execve(const char *_Filename,const char *const *_ArgList,const char *const *_Env);
78   _CRTIMP intptr_t __cdecl _execvp(const char *_Filename,const char *const *_ArgList);
79   _CRTIMP intptr_t __cdecl _execvpe(const char *_Filename,const char *const *_ArgList,const char *const *_Env);
80   _CRTIMP intptr_t __cdecl _spawnl(int _Mode,const char *_Filename,const char *_ArgList,...);
81   _CRTIMP intptr_t __cdecl _spawnle(int _Mode,const char *_Filename,const char *_ArgList,...);
82   _CRTIMP intptr_t __cdecl _spawnlp(int _Mode,const char *_Filename,const char *_ArgList,...);
83   _CRTIMP intptr_t __cdecl _spawnlpe(int _Mode,const char *_Filename,const char *_ArgList,...);
84 
85 #ifndef _SPAWNV_DEFINED
86 #define _SPAWNV_DEFINED
87   _CRTIMP intptr_t __cdecl _spawnv(int _Mode,const char *_Filename,const char *const *_ArgList);
88   _CRTIMP intptr_t __cdecl _spawnve(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
89   _CRTIMP intptr_t __cdecl _spawnvp(int _Mode,const char *_Filename,const char *const *_ArgList);
90   _CRTIMP intptr_t __cdecl _spawnvpe(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
91 #endif
92 
93 #ifndef _CRT_SYSTEM_DEFINED
94 #define _CRT_SYSTEM_DEFINED
95   int __cdecl system(const char *_Command);
96 #endif
97 
98 #ifndef _WEXEC_DEFINED
99 #define _WEXEC_DEFINED
100   _CRTIMP intptr_t __cdecl _wexecl(const wchar_t *_Filename,const wchar_t *_ArgList,...);
101   _CRTIMP intptr_t __cdecl _wexecle(const wchar_t *_Filename,const wchar_t *_ArgList,...);
102   _CRTIMP intptr_t __cdecl _wexeclp(const wchar_t *_Filename,const wchar_t *_ArgList,...);
103   _CRTIMP intptr_t __cdecl _wexeclpe(const wchar_t *_Filename,const wchar_t *_ArgList,...);
104   _CRTIMP intptr_t __cdecl _wexecv(const wchar_t *_Filename,const wchar_t *const *_ArgList);
105   _CRTIMP intptr_t __cdecl _wexecve(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
106   _CRTIMP intptr_t __cdecl _wexecvp(const wchar_t *_Filename,const wchar_t *const *_ArgList);
107   _CRTIMP intptr_t __cdecl _wexecvpe(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
108 #endif
109 
110 #ifndef _WSPAWN_DEFINED
111 #define _WSPAWN_DEFINED
112   _CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
113   _CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
114   _CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
115   _CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
116   _CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
117   _CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
118   _CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
119   _CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
120 #endif
121 
122 #ifndef _CRT_WSYSTEM_DEFINED
123 #define _CRT_WSYSTEM_DEFINED
124   _CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
125 #endif
126 #endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */
127 
128 #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
129   intptr_t __cdecl _loaddll(char *_Filename);
130   int __cdecl _unloaddll(intptr_t _Handle);
131   int (__cdecl *__cdecl _getdllprocaddr(intptr_t _Handle,char *_ProcedureName,intptr_t _Ordinal))(void);
132 #endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */
133 
134 #ifdef _DECL_DLLMAIN
135 #ifdef _WINDOWS_
136   WINBOOL WINAPI DllMain(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
137   WINBOOL WINAPI _CRT_INIT(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
138   WINBOOL WINAPI _wCRT_INIT(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
139   extern WINBOOL (WINAPI *const _pRawDllMain)(HANDLE,DWORD,LPVOID);
140 #else
141   int __stdcall DllMain(void *_HDllHandle,unsigned _Reason,void *_Reserved);
142   int __stdcall _CRT_INIT(void *_HDllHandle,unsigned _Reason,void *_Reserved);
143   int __stdcall _wCRT_INIT(void *_HDllHandle,unsigned _Reason,void *_Reserved);
144   extern int (__stdcall *const _pRawDllMain)(void *,unsigned,void *);
145 #endif
146 #endif
147 
148 #ifndef	NO_OLDNAMES
149 #define P_WAIT _P_WAIT
150 #define P_NOWAIT _P_NOWAIT
151 #define P_OVERLAY _P_OVERLAY
152 #define OLD_P_OVERLAY _OLD_P_OVERLAY
153 #define P_NOWAITO _P_NOWAITO
154 #define P_DETACH _P_DETACH
155 #define WAIT_CHILD _WAIT_CHILD
156 #define WAIT_GRANDCHILD _WAIT_GRANDCHILD
157 
158 #if defined(_CRT_USE_WINAPI_FAMILY_DESKTOP_APP) || defined(WINSTORECOMPAT)
159 #ifndef _CRT_GETPID_DEFINED
160 #define _CRT_GETPID_DEFINED  /* Also in unistd.h */
161   int __cdecl getpid(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
162 #endif
163 #endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP || WINSTORECOMPAT */
164 #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
165   intptr_t __cdecl cwait(int *_TermStat,intptr_t _ProcHandle,int _Action) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
166 #ifdef __GNUC__
167   int __cdecl execl(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
168   int __cdecl execle(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
169   int __cdecl execlp(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
170   int __cdecl execlpe(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
171 #else
172   intptr_t __cdecl execl(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
173   intptr_t __cdecl execle(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
174   intptr_t __cdecl execlp(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
175   intptr_t __cdecl execlpe(const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
176 #endif
177   intptr_t __cdecl spawnl(int,const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
178   intptr_t __cdecl spawnle(int,const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
179   intptr_t __cdecl spawnlp(int,const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
180   intptr_t __cdecl spawnlpe(int,const char *_Filename,const char *_ArgList,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
181 #ifdef __GNUC__
182   /* Those methods are predefined by gcc builtins to return int. So to prevent
183      stupid warnings, define them in POSIX way.  This is save, because those
184      methods do not return in success case, so that the return value is not
185      really dependent to its scalar width.  */
186   _CRTIMP int __cdecl execv(const char *_Filename,char *const _ArgList[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
187   _CRTIMP int __cdecl execve(const char *_Filename,char *const _ArgList[],char *const _Env[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
188   _CRTIMP int __cdecl execvp(const char *_Filename,char *const _ArgList[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
189   _CRTIMP int __cdecl execvpe(const char *_Filename,char *const _ArgList[],char *const _Env[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
190 #else
191   _CRTIMP intptr_t __cdecl execv(const char *_Filename,char *const _ArgList[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
192   _CRTIMP intptr_t __cdecl execve(const char *_Filename,char *const _ArgList[],char *const _Env[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
193   _CRTIMP intptr_t __cdecl execvp(const char *_Filename,char *const _ArgList[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
194   _CRTIMP intptr_t __cdecl execvpe(const char *_Filename,char *const _ArgList[],char *const _Env[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
195 #endif
196   _CRTIMP intptr_t __cdecl spawnv(int,const char *_Filename,char *const _ArgList[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
197   _CRTIMP intptr_t __cdecl spawnve(int,const char *_Filename,char *const _ArgList[],char *const _Env[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
198   _CRTIMP intptr_t __cdecl spawnvp(int,const char *_Filename,char *const _ArgList[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
199   _CRTIMP intptr_t __cdecl spawnvpe(int,const char *_Filename,char *const _ArgList[],char *const _Env[]) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
200 #endif
201 #endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */
202 
203 #ifdef __cplusplus
204 }
205 #endif
206 #endif
207 #endif
208