1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef _FDLEAK_H_ 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _FDLEAK_H_ 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define DO(op) \ 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ({ \ 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown long res = op; \ 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (res < 0) { \ 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown perror(#op); \ 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown exit(1); \ 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }; \ 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res; \ 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }) 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * The macro below closes file descriptors inherited from the process 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * that forked the current process. Close these file descriptors right 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * after the start of main() in order to get consistent results across 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * different releases. Known behavior: 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - Fedora Core 1's Perl opens /dev/pts/2 as fd 10. 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - For Ubuntu 8.04, see also 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/235184 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define CLOSE_INHERITED_FDS { int i; for (i = 3; i < 64; i++) close(i); } 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* _FDLEAK_H_ */ 29