death to trailing whitespace
[openafs.git] / src / procmgmt / procmgmt.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef OPENAFS_PROCMGMT_H
11 #define OPENAFS_PROCMGMT_H
12
13
14 #ifdef AFS_NT40_ENV
15 /* Process management definitions for Windows NT */
16
17 #include <process.h>
18
19
20 /* -----------------  Processes  ---------------- */
21
22
23 typedef int pid_t;              /* process id type */
24
25 /* Wait status macros -- status returned in standard Unix format */
26
27 #define WIFEXITED(wstat)     ((int)((wstat) & 0xFF) == 0)
28 #define WIFSIGNALED(wstat)   ((int)((wstat) & 0xFF) != 0)
29 #define WEXITSTATUS(wstat)   ((int)(((wstat) >> 8) & 0xFF))
30 #define WTERMSIG(wstat)      ((int)((wstat) & 0xFF))
31 #define WCOREDUMP(wstat)     ((int)0)
32
33 #define WEXITED_ENCODE(status)     ((int)(((status) & 0xFF) << 8))
34 #define WSIGNALED_ENCODE(signo)    ((int)((signo) & 0xFF))
35
36 /* Wait option macros */
37
38 #define WNOHANG   0x01
39
40 /* Process related data declarations */
41
42 #ifndef PMGTEXPORT
43 #define PMGTEXPORT __declspec(dllimport)
44 #endif
45
46 #define spawnDatap pmgt_spawnData
47 PMGTEXPORT extern void *pmgt_spawnData;
48
49 #define spawnDataLen pmgt_spawnDataLen
50 PMGTEXPORT extern size_t pmgt_spawnDataLen;
51
52
53 /* Process related function declarations */
54
55 #define PMGT_SPAWN_DETACHED_ENV_NAME  "TransarcAfsPmgtSpawnDetached"
56
57 #define spawnprocveb(spath, sargv, senvp, sdatap, sdatalen) \
58     pmgt_ProcessSpawnVEB(spath, sargv, senvp, sdatap, sdatalen)
59 #define spawnprocve(spath, sargv, senvp, estatus) \
60     pmgt_ProcessSpawnVEB(spath, sargv, senvp, NULL, 0)
61 #define spawnprocv(spath, sargv, estatus) \
62     pmgt_ProcessSpawnVEB(spath, sargv, NULL, NULL, 0)
63
64 extern pid_t pmgt_ProcessSpawnVEB(const char *spath, char **sargv,
65                                   char **senvp, void *sdatap,
66                                   size_t sdatalen);
67
68
69 #define waitpid(pid, statusP, options) \
70     pmgt_ProcessWaitPid(pid, statusP, options)
71 #define wait(statusP) \
72     pmgt_ProcessWaitPid((pid_t)-1, statusP, 0)
73
74 extern pid_t pmgt_ProcessWaitPid(pid_t pid, int *statusP, int options);
75
76
77
78
79
80
81 /* -----------------  Signals  ---------------- */
82
83
84 /* Attempt to override Microsoft (MSVC) signal definitions */
85 #ifndef _INC_SIGNAL
86 #define _INC_SIGNAL
87 #else
88 #error "Windows requires custom signal definitions; do not include signal.h."
89 #endif
90
91
92 /* Supported signals
93  *     Support is provided for a subset of the standard Unix signals.
94  *     Note that Windows NT (via the MSVC runtime) will NOT generate signals
95  *     in response to most HW faults or terminal activity; in particular,
96  *     Windows NT will NOT generate SIGILL, SIGSEGV, SIGINT, or SIGTERM.
97  */
98
99
100 #define SIGHUP  1               /* hangup */
101 #define SIGINT  2               /* interrupt */
102 #define SIGQUIT 3               /* quit */
103 #define SIGILL  4               /* illegal instruction */
104 #define SIGABRT 6               /* abnormal termination triggered by abort() */
105 #define SIGFPE  8               /* floating point exception */
106 #define SIGKILL 9               /* kill */
107 #define SIGSEGV 11              /* segmentation violation */
108 #define SIGTERM 15              /* software termination signal from kill */
109 #define SIGUSR1 16              /* user defined signal 1 */
110 #define SIGUSR2 17              /* user defined signal 2 */
111 #define SIGCLD  18              /* child status change - alias for compatability */
112 #define SIGCHLD 18              /* child status change */
113 #define SIGTSTP 24              /* user stop requested from tty */
114
115 #define NSIG 25                 /* max signal number + 1   (sig set macros presume <= 33) */
116
117
118 /* Signal actions */
119
120 #define SIG_ERR   ((void (__cdecl *)(int))-1)   /* signal() error value */
121 #define SIG_DFL   ((void (__cdecl *)(int))0)    /* default signal action */
122 #define SIG_IGN   ((void (__cdecl *)(int))1)    /* ignore signal */
123
124
125 /* Signal set type and set manipulation macros */
126
127 typedef unsigned int sigset_t;
128
129 #define sigsetbit(signo)  ((unsigned int)1 << (((signo) - 1) & (32 - 1)))
130
131 #define sigemptyset(setP)          ((*(setP) = 0) ? 0 : 0)
132 #define sigfillset(setP)           ((*(setP) = ~(unsigned int)0) ? 0 : 0)
133 #define sigaddset(setP, signo)     ((*(setP) |= sigsetbit(signo)) ? 0 : 0)
134 #define sigdelset(setP, signo)     ((*(setP) &= ~sigsetbit(signo)) ? 0 : 0)
135 #define sigismember(setP, signo)   ((*(setP) & sigsetbit(signo)) ? 1 : 0)
136
137
138 /* Sigaction type and related macros */
139
140 struct sigaction {
141     void (__cdecl * sa_handler) (int);
142     sigset_t sa_mask;
143     int sa_flags;
144 };
145
146 #define SA_RESETHAND   0x00000001
147
148
149 /* Signal related function declarations */
150
151 #define sigaction(signo, actP, oactP)  pmgt_SigactionSet(signo, actP, oactP)
152 extern int pmgt_SigactionSet(int signo, const struct sigaction *actionP,
153                              struct sigaction *old_actionP);
154
155 #define signal(signo, dispP)  pmgt_SignalSet(signo, dispP)
156 extern void (__cdecl *
157              pmgt_SignalSet(int signo, void (__cdecl * dispP) (int))) (int);
158
159 #define raise(signo)  pmgt_SignalRaiseLocal(signo)
160 extern int pmgt_SignalRaiseLocal(int signo);
161
162 #define kill(pid, signo)  pmgt_SignalRaiseRemote(pid, signo)
163 extern int pmgt_SignalRaiseRemote(pid_t pid, int signo);
164
165
166
167 #else
168 /* Process management definitions for Unix */
169
170 #include <sys/types.h>
171 #include <sys/wait.h>
172
173 #include <signal.h>
174 #include <unistd.h>
175
176
177 /* -----------------  Processes  ---------------- */
178
179 #define spawnprocve(spath, sargv, senvp, estatus) \
180     pmgt_ProcessSpawnVE(spath, sargv, senvp, estatus)
181 #define spawnprocv(spath, sargv, estatus) \
182     pmgt_ProcessSpawnVE(spath, sargv, NULL, estatus)
183
184 extern pid_t pmgt_ProcessSpawnVE(const char *spath, char **sargv,
185                                  char **senvp, int estatus);
186
187
188 #endif /* AFS_NT40_ENV */
189
190 #endif /* OPENAFS_PROCMGMT_H */