- err("open /dev/null failed");
- if (outpipe[1] > 0)
- dup2(outpipe[1], STDOUT_FILENO);
- if (errpipe[1] > 0)
- dup2(errpipe[1], STDERR_FILENO);
- execv(arg, argv);
-
- /* we should never reach this */
- err("exec of program failed");
+ err("open /dev/null failed: %s", strerror(errno));
+ if (outpipe[WRITE_END] > 0) {
+ dup2(outpipe[WRITE_END], STDOUT_FILENO);
+ close(outpipe[WRITE_END]);
+ }
+ if (errpipe[WRITE_END] > 0) {
+ dup2(errpipe[WRITE_END], STDERR_FILENO);
+ close(errpipe[WRITE_END]);
+ }
+ execv(argv[0], argv);
+ if ((errno == ENOENT) || (errno = ENOTDIR)) {
+ /* may be on a filesytem which is not mounted right now */
+ info("program '%s' not found", argv[0]);
+ } else {
+ /* other problems */
+ err("exec of program '%s' failed", argv[0]);
+ }