diff options
author | Brad King <brad.king@kitware.com> | 2018-03-06 13:45:29 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-03-06 13:45:29 (GMT) |
commit | 8070abf784e0b12fdc5dfbafecdbe604f96c44a9 (patch) | |
tree | 94694a630ac934242cb3a35bb62a0dfab8dc96ab | |
parent | 566f8fa2f3bee5bf24902bcc125535435e6a9599 (diff) | |
parent | 50b7be6d1f2022483cb75a5347a1e1a70a2994e0 (diff) | |
download | CMake-8070abf784e0b12fdc5dfbafecdbe604f96c44a9.zip CMake-8070abf784e0b12fdc5dfbafecdbe604f96c44a9.tar.gz CMake-8070abf784e0b12fdc5dfbafecdbe604f96c44a9.tar.bz2 |
Merge branch 'autogen-empty-source-file-fix' into release-3.11
Merge-request: !1825
-rw-r--r-- | Source/cmQtAutoGenerator.cxx | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/Source/cmQtAutoGenerator.cxx b/Source/cmQtAutoGenerator.cxx index 5b2b6d0..1939bd4 100644 --- a/Source/cmQtAutoGenerator.cxx +++ b/Source/cmQtAutoGenerator.cxx @@ -190,25 +190,32 @@ bool cmQtAutoGenerator::FileSystem::FileRead(std::string& content, bool success = false; { std::lock_guard<std::mutex> lock(Mutex_); - if (cmSystemTools::FileExists(filename)) { + if (cmSystemTools::FileExists(filename, true)) { std::size_t const length = cmSystemTools::FileLength(filename); cmsys::ifstream ifs(filename.c_str(), (std::ios::in | std::ios::binary)); if (ifs) { - content.resize(length); - ifs.read(&content.front(), content.size()); - if (ifs) { - success = true; + if (length > 0) { + content.resize(length); + ifs.read(&content.front(), content.size()); + if (ifs) { + success = true; + } else { + content.clear(); + if (error != nullptr) { + error->append("Reading from the file failed."); + } + } } else { + // Readable but empty file content.clear(); - if (error != nullptr) { - error->append("Reading from the file failed."); - } + success = true; } } else if (error != nullptr) { error->append("Opening the file for reading failed."); } } else if (error != nullptr) { - error->append("The file does not exist."); + error->append( + "The file does not exist, is not readable or is a directory."); } } return success; @@ -539,8 +546,8 @@ void cmQtAutoGenerator::ReadOnlyProcessT::UVExit(uv_process_t* handle, void cmQtAutoGenerator::ReadOnlyProcessT::UVTryFinish() { // There still might be data in the pipes after the process has finished. - // Therefore check if the process is finished AND all pipes are closed before - // signaling the worker thread to continue. + // Therefore check if the process is finished AND all pipes are closed + // before signaling the worker thread to continue. if (UVProcess_.get() == nullptr) { if (UVPipeOut_.uv_pipe() == nullptr) { if (UVPipeErr_.uv_pipe() == nullptr) { |