2 * Copyright 2000, International Business Machines Corporation and others.
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
10 #ifndef OPENAFS_PROCMGMT_H
11 #define OPENAFS_PROCMGMT_H
15 /* Process management definitions for Windows NT */
20 /* ----------------- Processes ---------------- */
23 typedef int pid_t; /* process id type */
25 /* Wait status macros -- status returned in standard Unix format */
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)
33 #define WEXITED_ENCODE(status) ((int)(((status) & 0xFF) << 8))
34 #define WSIGNALED_ENCODE(signo) ((int)((signo) & 0xFF))
36 /* Wait option macros */
40 /* Process related data declarations */
43 #define PMGTEXPORT __declspec(dllimport)
46 #define spawnDatap pmgt_spawnData
47 PMGTEXPORT extern void *pmgt_spawnData;
49 #define spawnDataLen pmgt_spawnDataLen
50 PMGTEXPORT extern size_t pmgt_spawnDataLen;
53 /* Process related function declarations */
55 #define PMGT_SPAWN_DETACHED_ENV_NAME "TransarcAfsPmgtSpawnDetached"
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)
64 extern pid_t pmgt_ProcessSpawnVEB(const char *spath, char **sargv,
65 char **senvp, void *sdatap,
69 #define waitpid(pid, statusP, options) \
70 pmgt_ProcessWaitPid(pid, statusP, options)
71 #define wait(statusP) \
72 pmgt_ProcessWaitPid((pid_t)-1, statusP, 0)
74 extern pid_t pmgt_ProcessWaitPid(pid_t pid, int *statusP, int options);
81 /* ----------------- Signals ---------------- */
84 /* Attempt to override Microsoft (MSVC) signal definitions */
88 #error "Windows requires custom signal definitions; do not include signal.h."
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.
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 */
115 #define NSIG 25 /* max signal number + 1 (sig set macros presume <= 33) */
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 */
125 /* Signal set type and set manipulation macros */
127 typedef unsigned int sigset_t;
129 #define sigsetbit(signo) ((unsigned int)1 << (((signo) - 1) & (32 - 1)))
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)
138 /* Sigaction type and related macros */
141 void (__cdecl * sa_handler) (int);
146 #define SA_RESETHAND 0x00000001
149 /* Signal related function declarations */
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);
155 #define signal(signo, dispP) pmgt_SignalSet(signo, dispP)
156 extern void (__cdecl *
157 pmgt_SignalSet(int signo, void (__cdecl * dispP) (int))) (int);
159 #define raise(signo) pmgt_SignalRaiseLocal(signo)
160 extern int pmgt_SignalRaiseLocal(int signo);
162 #define kill(pid, signo) pmgt_SignalRaiseRemote(pid, signo)
163 extern int pmgt_SignalRaiseRemote(pid_t pid, int signo);
168 /* Process management definitions for Unix */
170 #include <sys/types.h>
171 #include <sys/wait.h>
177 /* ----------------- Processes ---------------- */
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)
184 extern pid_t pmgt_ProcessSpawnVE(const char *spath, char **sargv,
185 char **senvp, int estatus);
188 #endif /* AFS_NT40_ENV */
190 #endif /* OPENAFS_PROCMGMT_H */