summaryrefslogtreecommitdiff
path: root/libs/IO
diff options
context:
space:
mode:
Diffstat (limited to 'libs/IO')
-rw-r--r--libs/IO/include/CommandReader.h1
-rw-r--r--libs/IO/nbproject/Makefile-Debug.mk16
-rw-r--r--libs/IO/nbproject/Makefile-Release.mk16
-rw-r--r--libs/IO/src/CommandReader.cc42
-rw-r--r--libs/IO/src/Reader.cc4
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)