From cba782a23ee5c9c668e02f9c6d95acba70464d18 Mon Sep 17 00:00:00 2001 From: Chris Rankin Date: Mon, 3 Oct 2011 01:48:45 +0100 Subject: Add CLOEXEC support for VDR plugin, plus a few extra descriptors. --- src/audio_dec/xine_a52_decoder.c | 2 +- src/input/input_dvb.c | 2 +- src/vdr/input_vdr.c | 18 ++++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/audio_dec/xine_a52_decoder.c b/src/audio_dec/xine_a52_decoder.c index bb0169a21..683b4dd1e 100644 --- a/src/audio_dec/xine_a52_decoder.c +++ b/src/audio_dec/xine_a52_decoder.c @@ -783,7 +783,7 @@ static audio_decoder_t *open_plugin (audio_decoder_class_t *class_gen, xine_stre this->a52_flags_map[i] |= A52_ADJUST_LEVEL; */ #ifdef DEBUG_A52 - a52file = open ("test.a52", O_CREAT | O_WRONLY | O_TRUNC, 0644); + a52file = create_cloexec("test.a52", O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); #endif return &this->audio_decoder; } diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 3667fbe43..6a984ab14 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -638,7 +638,7 @@ static tuner_t *XINE_MALLOC tuner_init(xine_t * xine, int adapter) if(this->feinfo.type==FE_OFDM) xprintf(this->xine,XINE_VERBOSITY_DEBUG,"TER Card\n"); if(this->feinfo.type==FE_ATSC) xprintf(this->xine,XINE_VERBOSITY_DEBUG,"US Card\n"); - if ((test_video=open(video_device, O_RDWR)) < 0) { + if ((test_video=open_cloexec(video_device, O_RDWR)) < 0) { xprintf(this->xine,XINE_VERBOSITY_DEBUG,"input_dvb: Card has no hardware decoder\n"); }else{ xprintf(this->xine,XINE_VERBOSITY_DEBUG,"input_dvb: Card HAS HARDWARE DECODER\n"); diff --git a/src/vdr/input_vdr.c b/src/vdr/input_vdr.c index ed478c80d..ac8c8c795 100644 --- a/src/vdr/input_vdr.c +++ b/src/vdr/input_vdr.c @@ -1919,7 +1919,7 @@ static int vdr_plugin_open_fifo_mrl(input_plugin_t *this_gen) filename = strdup(filename); _x_mrl_unescape (filename); - this->fh = open(filename, O_RDONLY | O_NONBLOCK); + this->fh = open_cloexec(filename, O_RDONLY | O_NONBLOCK); lprintf("filename '%s'\n", filename); @@ -1960,7 +1960,7 @@ static int vdr_plugin_open_fifo_mrl(input_plugin_t *this_gen) char *filename_control = 0; asprintf(&filename_control, "%s.control", filename); - this->fh_control = open(filename_control, O_RDONLY); + this->fh_control = open_cloexec(filename_control, O_RDONLY); if (this->fh_control == -1) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, @@ -1980,7 +1980,7 @@ static int vdr_plugin_open_fifo_mrl(input_plugin_t *this_gen) char *filename_result = 0; asprintf(&filename_result, "%s.result", filename); - this->fh_result = open(filename_result, O_WRONLY); + this->fh_result = open_cloexec(filename_result, O_WRONLY); if (this->fh_result == -1) { perror("failed"); @@ -2002,7 +2002,7 @@ static int vdr_plugin_open_fifo_mrl(input_plugin_t *this_gen) char *filename_event = 0; asprintf(&filename_event, "%s.event", filename); - this->fh_event = open(filename_event, O_WRONLY); + this->fh_event = open_cloexec(filename_event, O_WRONLY); if (this->fh_event == -1) { perror("failed"); @@ -2038,6 +2038,16 @@ static int vdr_plugin_open_socket(vdr_input_plugin_t *this, struct hostent *host return -1; } +#ifndef WIN32 + if (fcntl(fd, F_SETFD, FD_CLOEXEC) < 0) { + xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "Failed to make socket uninheritable (%s)\n", strerror(errno)); + } +#else + if (!SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0)) { + xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "Failed to make socket uninheritable\n"); + } +#endif + iaddr.s_addr = *((unsigned int *)host->h_addr_list[0]); sain.sin_port = htons(port); -- cgit v1.2.3