diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2002-02-17 14:51:29 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2002-02-17 14:51:29 +0100 |
commit | aaf792357da5d9aaa0f8f61da78daf12508a69c4 (patch) | |
tree | f1aba2d66d390e9a3a47836e38b04b272e3ce80a | |
parent | e18b303818ee1ac918176ce07eb64d3d02ae122a (diff) | |
download | vdr-aaf792357da5d9aaa0f8f61da78daf12508a69c4.tar.gz vdr-aaf792357da5d9aaa0f8f61da78daf12508a69c4.tar.bz2 |
Fixed closing all unused file descriptors when opening a pipe
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | thread.c | 9 |
3 files changed, 9 insertions, 3 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 8d4b3030..038dc88d 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -143,6 +143,7 @@ Artur Skawina <skawina@geocities.com> Werner Fink <werner@suse.de> for making I/O more robust by handling EINTR + for fixing closing all unused file descriptors when opening a pipe Rolf Hakenes <hakenes@hippomi.de> for providing 'libdtv' and adapting the EIT mechanisms to it @@ -1012,3 +1012,5 @@ Video Disk Recorder Revision History - When deleting a recording that is currently still being recorded, the related timer will now automatically be terminated. If this is a repeating timer, it will receive a "First day" setting that skips the timer for this day. +- Fixed closing all unused file descriptors when opening a pipe (thanks to + Werner Fink). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 1.16 2001/10/27 13:23:06 kls Exp $ + * $Id: thread.c 1.17 2002/02/17 14:47:28 kls Exp $ */ #include "thread.h" @@ -277,8 +277,11 @@ bool cPipe::Open(const char *Command, const char *Mode) _exit(-1); } else { - for (int i = STDERR_FILENO + 1; i < fd[1 - iopipe]; i++) - close(i); //close all dup'ed filedescriptors + for (int i = 0; i <= fd[1]; i++) { + if (i == STDIN_FILENO || i == STDOUT_FILENO || i == STDERR_FILENO) + continue; + close(i); // close all dup'ed filedescriptors + } if (execl("/bin/sh", "sh", "-c", Command, NULL) == -1) { LOG_ERROR_STR(Command); close(fd[1 - iopipe]); |