X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=fd.c;h=c675aaffd4b99083d3ab0e26445574c2b87ad51b;hb=40de1dd2fdbb054444d585aa70e2d50166a66e07;hp=58851723978fb3c9856f87aa35d65a7141c162d7;hpb=f18341c277abf63dae1598b76cdd207006a509e0;p=paraslash.git diff --git a/fd.c b/fd.c index 58851723..c675aaff 100644 --- a/fd.c +++ b/fd.c @@ -285,9 +285,10 @@ int para_opendir(const char *dirname, DIR **dir, int *cwd) if (*dir) return 1; ret = -ERRNO_TO_PARA_ERROR(errno); -/* Ignore return value of fchdir() and close(). We're busted anyway. */ - if (cwd) - fchdir(*cwd); + /* Ignore return value of fchdir() and close(). We're busted anyway. */ + if (cwd) { + int __a_unused ret2 = fchdir(*cwd); /* STFU, gcc */ + } close_cwd: if (cwd) close(*cwd); @@ -426,3 +427,24 @@ again: goto again; return ret; } + +/** + * Ensure that file descriptors 0, 1, and 2 are valid. + * + * Common approach that opens /dev/null until it gets a file descriptor greater + * than two. + * + * \sa okir's Black Hats Manual. + */ +void valid_fd_012(void) +{ + while (1) { + int fd = open("/dev/null", O_RDWR); + if (fd < 0) + exit(EXIT_FAILURE); + if (fd > 2) { + close(fd); + break; + } + } +}