1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Fixed closing all unused file descriptors when opening a pipe

This commit is contained in:
Klaus Schmidinger 2002-02-17 14:51:29 +01:00
parent e18b303818
commit aaf792357d
3 changed files with 9 additions and 3 deletions

View File

@ -143,6 +143,7 @@ Artur Skawina <skawina@geocities.com>
Werner Fink <werner@suse.de> Werner Fink <werner@suse.de>
for making I/O more robust by handling EINTR 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> Rolf Hakenes <hakenes@hippomi.de>
for providing 'libdtv' and adapting the EIT mechanisms to it for providing 'libdtv' and adapting the EIT mechanisms to it

View File

@ -1012,3 +1012,5 @@ Video Disk Recorder Revision History
- When deleting a recording that is currently still being recorded, the related - 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 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. 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).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * 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" #include "thread.h"
@ -277,8 +277,11 @@ bool cPipe::Open(const char *Command, const char *Mode)
_exit(-1); _exit(-1);
} }
else { else {
for (int i = STDERR_FILENO + 1; i < fd[1 - iopipe]; i++) 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 close(i); // close all dup'ed filedescriptors
}
if (execl("/bin/sh", "sh", "-c", Command, NULL) == -1) { if (execl("/bin/sh", "sh", "-c", Command, NULL) == -1) {
LOG_ERROR_STR(Command); LOG_ERROR_STR(Command);
close(fd[1 - iopipe]); close(fd[1 - iopipe]);