Hash :
3c08dcc3
Author :
Date :
2008-10-18T02:43:18
Avoid gcc warnings because of #pragma GCC system_header on older gcc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397
/* Definitions for POSIX spawn interface.
Copyright (C) 2000, 2003, 2004, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef _GL_SPAWN_H
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
/* The include_next requires a split double-inclusion guard. */
#if @HAVE_SPAWN_H@
# @INCLUDE_NEXT@ @NEXT_SPAWN_H@
#endif
#ifndef _GL_SPAWN_H
#define _GL_SPAWN_H
#include <sched.h>
#include <signal.h>
#include <sys/types.h>
#ifndef __THROW
# define __THROW
#endif
/* GCC 2.95 and later have "__restrict"; C99 compilers have
"restrict", and "configure" may have defined "restrict".
Other compilers use __restrict, __restrict__, and _Restrict, and
'configure' might #define 'restrict' to those words, so pick a
different name. */
#ifndef _Restrict_
# if 199901L <= __STDC_VERSION__
# define _Restrict_ restrict
# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
# define _Restrict_ __restrict
# else
# define _Restrict_
# endif
#endif
/* gcc 3.1 and up support the [restrict] syntax. Don't trust
sys/cdefs.h's definition of __restrict_arr, though, as it
mishandles gcc -ansi -pedantic. */
#ifndef _Restrict_arr_
# if ((199901L <= __STDC_VERSION__ \
|| ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \
&& !__STRICT_ANSI__)) \
&& !defined __GNUG__)
# define _Restrict_arr_ _Restrict_
# else
# define _Restrict_arr_
# endif
#endif
/* The definition of GL_LINK_WARNING is copied here. */
/* Data structure to contain attributes for thread creation. */
#if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_t rpl_posix_spawnattr_t
#endif
typedef struct
{
short int _flags;
pid_t _pgrp;
sigset_t _sd;
sigset_t _ss;
struct sched_param _sp;
int _policy;
int __pad[16];
} posix_spawnattr_t;
/* Data structure to contain information about the actions to be
performed in the new process with respect to file descriptors. */
#if @REPLACE_POSIX_SPAWN@
# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t
#endif
typedef struct
{
int _allocated;
int _used;
struct __spawn_action *_actions;
int __pad[16];
} posix_spawn_file_actions_t;
/* Flags to be set in the `posix_spawnattr_t'. */
#if @REPLACE_POSIX_SPAWN@
/* Use the values from the system, for better compatibility. */
/* But this implementation does not support AIX extensions. */
# undef POSIX_SPAWN_FORK_HANDLERS
#else
# define POSIX_SPAWN_RESETIDS 0x01
# define POSIX_SPAWN_SETPGROUP 0x02
# define POSIX_SPAWN_SETSIGDEF 0x04
# define POSIX_SPAWN_SETSIGMASK 0x08
# define POSIX_SPAWN_SETSCHEDPARAM 0x10
# define POSIX_SPAWN_SETSCHEDULER 0x20
#endif
/* A GNU extension. Use the next free bit position. */
#define POSIX_SPAWN_USEVFORK \
((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \
| POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \
| POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \
| POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1) \
| POSIX_SPAWN_SETSCHEDPARAM | (POSIX_SPAWN_SETSCHEDPARAM - 1) \
| POSIX_SPAWN_SETSCHEDULER | (POSIX_SPAWN_SETSCHEDULER - 1)) \
+ 1)
typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
[2 * (((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
| POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK
| POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)
& POSIX_SPAWN_USEVFORK) == 0) - 1];
#ifdef __cplusplus
extern "C" {
#endif
#if @GNULIB_POSIX_SPAWN@
/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
Before running the process perform the actions described in FILE-ACTIONS.
This function is a possible cancellation points and therefore not
marked with __THROW. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawn rpl_posix_spawn
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawn (pid_t *_Restrict_ __pid,
const char *_Restrict_ __path,
const posix_spawn_file_actions_t *_Restrict_ __file_actions,
const posix_spawnattr_t *_Restrict_ __attrp,
char *const argv[_Restrict_arr_],
char *const envp[_Restrict_arr_]);
# endif
#endif
#if @GNULIB_POSIX_SPAWNP@
/* Similar to `posix_spawn' but search for FILE in the PATH.
This function is a possible cancellation points and therefore not
marked with __THROW. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnp rpl_posix_spawnp
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnp (pid_t *__pid, const char *__file,
const posix_spawn_file_actions_t *__file_actions,
const posix_spawnattr_t *__attrp,
char *const argv[], char *const envp[]);
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_INIT@
/* Initialize data structure with attributes for `spawn' to default values. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_init rpl_posix_spawnattr_init
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_DESTROY@
/* Free resources associated with ATTR. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_destroy rpl_posix_spawnattr_destroy
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
/* Store signal mask for signals with default handling from ATTR in
SIGDEFAULT. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t *_Restrict_ __attr,
sigset_t *_Restrict_ __sigdefault)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *_Restrict_ __attr,
const sigset_t *_Restrict_ __sigdefault)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
/* Store signal mask for the new process from ATTR in SIGMASK. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *_Restrict_ __attr,
sigset_t *_Restrict_ __sigmask) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
/* Set signal mask for the new process in ATTR to SIGMASK. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_setsigmask (posix_spawnattr_t *_Restrict_ __attr,
const sigset_t *_Restrict_ __sigmask)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
/* Get flag word from the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_getflags rpl_posix_spawnattr_getflags
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_getflags (const posix_spawnattr_t *_Restrict_ __attr,
short int *_Restrict_ __flags) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
/* Store flags in the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_setflags rpl_posix_spawnattr_setflags
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_setflags (posix_spawnattr_t *__attr,
short int __flags) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
/* Get process group ID from the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *_Restrict_ __attr,
pid_t *_Restrict_ __pgroup)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
/* Store process group ID in the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
pid_t __pgroup) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
/* Get scheduling policy from the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *_Restrict_ __attr,
int *_Restrict_ __schedpolicy)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
/* Store scheduling policy in the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr,
int __schedpolicy) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
/* Get scheduling parameters from the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_getschedparam (const posix_spawnattr_t *_Restrict_ __attr,
struct sched_param *_Restrict_ __schedparam) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
/* Store scheduling parameters in the attribute structure. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawnattr_setschedparam (posix_spawnattr_t *_Restrict_ __attr,
const struct sched_param *_Restrict_ __schedparam) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
/* Initialize data structure for file attribute for `spawn' call. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *__file_actions) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
/* Free resources associated with FILE-ACTIONS. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *__file_actions) __THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
/* Add an action to FILE-ACTIONS which tells the implementation to call
`open' for the given file during the `spawn' call. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *_Restrict_ __file_actions,
int __fd,
const char *_Restrict_ __path,
int __oflag, mode_t __mode)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
/* Add an action to FILE-ACTIONS which tells the implementation to call
`close' for the given file descriptor during the `spawn' call. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *__file_actions,
int __fd)
__THROW;
# endif
#endif
#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
/* Add an action to FILE-ACTIONS which tells the implementation to call
`dup2' for the given file descriptors during the `spawn' call. */
# if @REPLACE_POSIX_SPAWN@
# define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2
# endif
# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@
extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *__file_actions,
int __fd, int __newfd) __THROW;
# endif
#endif
#ifdef __cplusplus
}
#endif
#endif /* _GL_SPAWN_H */
#endif /* _GL_SPAWN_H */