From 574d871e77cf622c45dd8b9609e5774bb54ad407 Mon Sep 17 00:00:00 2001 From: Victor Ostashevsky Date: Wed, 11 Apr 2012 15:02:09 +0200 Subject: [PATCH] Fix file descriptor and memory leak in autotools plugin Don't create QFile's on heap when not needed. Don't forget to delete those which have to created on heap. Change-Id: I0e23e0d926febbfd464b3ff5d3e29fd46c16cb44 Reviewed-by: Daniel Teske Reviewed-by: Peter Penz --- .../autotoolsprojectmanager/makefileparser.cpp | 15 ++++++++++----- .../autotoolsprojectmanager/makefileparser.h | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/plugins/autotoolsprojectmanager/makefileparser.cpp b/src/plugins/autotoolsprojectmanager/makefileparser.cpp index 0bee4403436..3d76c1cc145 100644 --- a/src/plugins/autotoolsprojectmanager/makefileparser.cpp +++ b/src/plugins/autotoolsprojectmanager/makefileparser.cpp @@ -57,6 +57,11 @@ MakefileParser::MakefileParser(const QString &makefile) : { } +MakefileParser::~MakefileParser() +{ + delete m_textStream.device(); +} + bool MakefileParser::parse() { m_mutex.lock(); @@ -261,11 +266,11 @@ void MakefileParser::parseSubDirs() + slash + makefileName; // Parse sub directory - QFile *file = new QFile(subDirMakefile); + QFile file(subDirMakefile); // Don't try to parse a file, that might not exist (e. g. // if SUBDIRS specifies a 'po' directory). - if (!file->exists()) + if (!file.exists()) continue; MakefileParser parser(subDirMakefile); @@ -422,15 +427,15 @@ void MakefileParser::parseIncludePaths() QFileInfo info(m_makefile); const QString dirName = info.absolutePath(); - QFile *file = new QFile(dirName + QLatin1String("/Makefile")); - if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) + QFile file(dirName + QLatin1String("/Makefile")); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; // TODO: The parsing is done very poor. Comments are ignored and targets // are ignored too. Whether it is worth to improve this, depends on whether // we want to parse the generated Makefile at all or whether we want to // improve the Makefile.am parsing to be aware of variables. - QTextStream textStream(file); + QTextStream textStream(&file); QString line; do { line = textStream.readLine(); diff --git a/src/plugins/autotoolsprojectmanager/makefileparser.h b/src/plugins/autotoolsprojectmanager/makefileparser.h index d943453fec8..8038f8c39fe 100644 --- a/src/plugins/autotoolsprojectmanager/makefileparser.h +++ b/src/plugins/autotoolsprojectmanager/makefileparser.h @@ -65,6 +65,8 @@ public: */ MakefileParser(const QString &makefile); + ~MakefileParser(); + /** * Parses the makefile. Must be invoked at least once, otherwise * the getter methods of MakefileParser will return empty values.