29#define __POSIX_HACKS_C
31int reserved_fd[FOPEN_MAX + 1] = { -1};
35static inline int reserve_fdpair (
int idx )
39 if ( pipe2 ( pipe_fds, O_CLOEXEC | O_NONBLOCK ) )
42 reserved_fd[ idx ] = pipe_fds[0];
43 reserved_fd[ idx + 1 ] = pipe_fds[1];
53 while ( i < ( FOPEN_MAX + 1 ) / 2 ) {
54 if ( reserve_fdpair ( i << 1 ) )
64FILE *posixhacks_fopen (
const char *path,
const char *mode )
66 close ( reserved_fd[reserved_fd_used++] );
67 return fopen ( path, mode );
70int posixhacks_fclose ( FILE *fp )
77 if ( ! ( reserved_fd_used & 1 ) )
78 close ( reserved_fd[reserved_fd_used++] );
80 reserved_fd_used -= 2;
82 if ( reserve_fdpair ( reserved_fd_used ) )
93 while ( i < ( FOPEN_MAX + 1 ) / 2 ) {
94 close ( reserved_fd[ ( i << 1 ) ] );
95 close ( reserved_fd[ ( i << 1 ) + 1 ] );
int make_iso_compilers_happy
#define posixhacks_deinit()
#define posixhacks_init()