Matthias Lederhofer wrote: > > +/* if any standard file descriptor is missing open it to /dev/null */ > +static void sanitize_stdfds(void) > +{ > + int devnull = -1, i; > + struct stat buf; > + for (i = 0; i < 3; ++i) { > + if (fstat(i, &buf) != -1) > + continue; > + if (devnull == -1 && > + (devnull = open("/dev/null", O_RDWR, 0)) == -1) > + die("open /dev/null failed: %s", strerror(errno)); > + if (dup2(devnull, i) != i) > + die("dup2 failed: %s", strerror(errno)); > + } > + if (devnull != -1) > + close(devnull); > +} This looks broken. The open will return i as this is the lowest free fd. I don't know what POSIX says about dup2(i,i) but anyway, you close it at the end which completely defeats the intent of the function. How's this? devnull = open("/dev/null", O_RDWR, 0); if (devnull == 0) devnull = dup(devnull); if (devnull == 1) devnull = dup(devnull); if (devnull == -1) die("open/dup /dev/null failed: %s", strerror(errno)); if (devnull > 2) close(devnull); Ciao, ET. - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html