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