diff options
Diffstat (limited to 'libs/IO')
-rw-r--r-- | libs/IO/include/CommandReader.h | 1 | ||||
-rw-r--r-- | libs/IO/nbproject/Makefile-Debug.mk | 16 | ||||
-rw-r--r-- | libs/IO/nbproject/Makefile-Release.mk | 16 | ||||
-rw-r--r-- | libs/IO/src/CommandReader.cc | 42 | ||||
-rw-r--r-- | libs/IO/src/Reader.cc | 4 |
5 files changed, 43 insertions, 36 deletions
diff --git a/libs/IO/include/CommandReader.h b/libs/IO/include/CommandReader.h index e54a64c..63ee7c1 100644 --- a/libs/IO/include/CommandReader.h +++ b/libs/IO/include/CommandReader.h @@ -43,6 +43,7 @@ protected: private: pid_t pid; std::vector<std::string> args; + static int fdMax; }; #endif /* COMMANDREADER_H */ diff --git a/libs/IO/nbproject/Makefile-Debug.mk b/libs/IO/nbproject/Makefile-Debug.mk index 36615b9..322f887 100644 --- a/libs/IO/nbproject/Makefile-Debug.mk +++ b/libs/IO/nbproject/Makefile-Debug.mk @@ -71,42 +71,42 @@ ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libio.a: ${OBJECTFILES} ${AR} -rv ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libio.a ${OBJECTFILES} $(RANLIB) ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libio.a -${OBJECTDIR}/src/CommandReader.o: src/CommandReader.cc +${OBJECTDIR}/src/CommandReader.o: nbproject/Makefile-${CND_CONF}.mk src/CommandReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/CommandReader.o src/CommandReader.cc -${OBJECTDIR}/src/FileRepresentation.o: src/FileRepresentation.cc +${OBJECTDIR}/src/FileRepresentation.o: nbproject/Makefile-${CND_CONF}.mk src/FileRepresentation.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/FileRepresentation.o src/FileRepresentation.cc -${OBJECTDIR}/src/LineReader.o: src/LineReader.cc +${OBJECTDIR}/src/LineReader.o: nbproject/Makefile-${CND_CONF}.mk src/LineReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/LineReader.o src/LineReader.cc -${OBJECTDIR}/src/File.o: src/File.cc +${OBJECTDIR}/src/File.o: nbproject/Makefile-${CND_CONF}.mk src/File.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/File.o src/File.cc -${OBJECTDIR}/src/Reader.o: src/Reader.cc +${OBJECTDIR}/src/Reader.o: nbproject/Makefile-${CND_CONF}.mk src/Reader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/Reader.o src/Reader.cc -${OBJECTDIR}/src/ConfigReader.o: src/ConfigReader.cc +${OBJECTDIR}/src/ConfigReader.o: nbproject/Makefile-${CND_CONF}.mk src/ConfigReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/ConfigReader.o src/ConfigReader.cc -${OBJECTDIR}/src/FileReader.o: src/FileReader.cc +${OBJECTDIR}/src/FileReader.o: nbproject/Makefile-${CND_CONF}.mk src/FileReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/FileReader.o src/FileReader.cc -${OBJECTDIR}/src/FileSystem.o: src/FileSystem.cc +${OBJECTDIR}/src/FileSystem.o: nbproject/Makefile-${CND_CONF}.mk src/FileSystem.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -g -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iinclude -I../util/include -I../vdr/include -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/FileSystem.o src/FileSystem.cc diff --git a/libs/IO/nbproject/Makefile-Release.mk b/libs/IO/nbproject/Makefile-Release.mk index 29ba2ae..3017cbd 100644 --- a/libs/IO/nbproject/Makefile-Release.mk +++ b/libs/IO/nbproject/Makefile-Release.mk @@ -71,42 +71,42 @@ ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libio.a: ${OBJECTFILES} ${AR} -rv ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libio.a ${OBJECTFILES} $(RANLIB) ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libio.a -${OBJECTDIR}/src/CommandReader.o: src/CommandReader.cc +${OBJECTDIR}/src/CommandReader.o: nbproject/Makefile-${CND_CONF}.mk src/CommandReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/CommandReader.o src/CommandReader.cc -${OBJECTDIR}/src/FileRepresentation.o: src/FileRepresentation.cc +${OBJECTDIR}/src/FileRepresentation.o: nbproject/Makefile-${CND_CONF}.mk src/FileRepresentation.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/FileRepresentation.o src/FileRepresentation.cc -${OBJECTDIR}/src/LineReader.o: src/LineReader.cc +${OBJECTDIR}/src/LineReader.o: nbproject/Makefile-${CND_CONF}.mk src/LineReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/LineReader.o src/LineReader.cc -${OBJECTDIR}/src/File.o: src/File.cc +${OBJECTDIR}/src/File.o: nbproject/Makefile-${CND_CONF}.mk src/File.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/File.o src/File.cc -${OBJECTDIR}/src/Reader.o: src/Reader.cc +${OBJECTDIR}/src/Reader.o: nbproject/Makefile-${CND_CONF}.mk src/Reader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/Reader.o src/Reader.cc -${OBJECTDIR}/src/ConfigReader.o: src/ConfigReader.cc +${OBJECTDIR}/src/ConfigReader.o: nbproject/Makefile-${CND_CONF}.mk src/ConfigReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/ConfigReader.o src/ConfigReader.cc -${OBJECTDIR}/src/FileReader.o: src/FileReader.cc +${OBJECTDIR}/src/FileReader.o: nbproject/Makefile-${CND_CONF}.mk src/FileReader.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/FileReader.o src/FileReader.cc -${OBJECTDIR}/src/FileSystem.o: src/FileSystem.cc +${OBJECTDIR}/src/FileSystem.o: nbproject/Makefile-${CND_CONF}.mk src/FileSystem.cc ${MKDIR} -p ${OBJECTDIR}/src ${RM} $@.d $(COMPILE.cc) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/src/FileSystem.o src/FileSystem.cc diff --git a/libs/IO/src/CommandReader.cc b/libs/IO/src/CommandReader.cc index 6b67511..0bc6109 100644 --- a/libs/IO/src/CommandReader.cc +++ b/libs/IO/src/CommandReader.cc @@ -28,6 +28,8 @@ #include <errno.h> #include <wait.h> +int cCommandReader::fdMax = 0; + cCommandReader::cCommandReader(const char *cmd) : pid(-1) { @@ -46,27 +48,28 @@ void cCommandReader::AddCommandParameter(const char* Param) void cCommandReader::Close(void) { - int status; + int status = 0; + if (!fdMax) fdMax = getdtablesize(); + if (fd > 0 && fd < fdMax) { + close(fd); + isyslog("closed fd #%d", fd); + } + fd = -1; if (pid != waitpid(pid, &status, 0)) { esyslog("ERROR: failed to wait for child #%d - error #%d", pid, errno); } else { isyslog("child exit status: %d", WEXITSTATUS(status)); } - pid = fd = -1; + pid = -1; } bool cCommandReader::Open(void) { enum { FDRead, FDWrite }; - int parent2Child[2]; - int child2Parent[2]; + int child2Parent[2] = {0}; - if (pipe(parent2Child)) { - esyslog("ERROR: failed to create parent2Child-pipe #%d", errno); - return false; - } if (pipe(child2Parent)) { esyslog("ERROR: failed to create child2Parent-pipe #%d", errno); return false; @@ -74,6 +77,8 @@ bool cCommandReader::Open(void) switch ((pid = fork())) { case -1: esyslog("fork failed"); + close(child2Parent[0]); + close(child2Parent[1]); return false; case 0: { /* child */ @@ -83,10 +88,6 @@ bool cCommandReader::Open(void) cmdArgs[i] = args[i].c_str(); } cmdArgs[args.size()] = 0; - if (dup2(parent2Child[FDRead], STDIN_FILENO) < 0) { - esyslog("ERROR: failed to create parents stdin #%d", errno); - exit(-1); - } if (dup2(child2Parent[FDWrite], STDOUT_FILENO) < 0) { esyslog("ERROR: failed to create childs stdout #%d", errno); exit(-1); @@ -95,26 +96,27 @@ bool cCommandReader::Open(void) esyslog("ERROR: failed to create childs stderr #%d", errno); exit(-1); } - if (close(parent2Child[FDWrite])) { - esyslog("ERROR: failed to close parents write-end of the pipe #%d", errno); - exit(-1); - } if (close(child2Parent[FDRead])) { esyslog("ERROR: failed to close childs read-end of the pipe #%d", errno); exit(-1); } execv(args[0].c_str(), (char *const*) cmdArgs); - - esyslog("should never be reached!"); + esyslog("should never be reached! #1"); exit(-1); } break; default: { /* parent */ - isyslog("child process #%d started ...", pid); + if (close(child2Parent[FDWrite])) { + esyslog("ERROR: failed to close write end from parent side!"); + exit(-1); + } + isyslog("child process #%d started ... fd %d", pid, child2Parent[FDRead]); fd = child2Parent[FDRead]; - return true; } } + esyslog("should never be reached! #2"); + close(child2Parent[0]); + close(child2Parent[1]); return false; } diff --git a/libs/IO/src/Reader.cc b/libs/IO/src/Reader.cc index cbead31..8ac49c7 100644 --- a/libs/IO/src/Reader.cc +++ b/libs/IO/src/Reader.cc @@ -33,6 +33,10 @@ cReader::cReader() cReader::~cReader() { + if (fd > 0) { + close(fd); + fd = -1; + } } int cReader::Read(char* buf, int bufSize) |