Browse Source

file: Report system error on failure to open file

Brad King 11 years ago
parent
commit
2c448dbfe7

+ 8 - 6
Source/cmFileCommand.cxx

@@ -232,9 +232,10 @@ bool cmFileCommand::HandleWriteCommand(std::vector<std::string> const& args,
   cmsys::ofstream file(fileName.c_str(), append?std::ios::app: std::ios::out);
   if ( !file )
     {
-    std::string error = "Internal CMake error when trying to open file: ";
-    error += fileName.c_str();
-    error += " for writing.";
+    std::string error = "failed to open for writing (";
+    error += cmSystemTools::GetLastSystemError();
+    error += "):\n  ";
+    error += fileName;
     this->SetError(error);
     return false;
     }
@@ -292,9 +293,10 @@ bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args)
 
   if ( !file )
     {
-    std::string error = "Internal CMake error when trying to open file: ";
-    error += fileName.c_str();
-    error += " for reading.";
+    std::string error = "failed to open for reading (";
+    error += cmSystemTools::GetLastSystemError();
+    error += "):\n  ";
+    error += fileName;
     this->SetError(error);
     return false;
     }

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -84,6 +84,7 @@ add_RunCMake_test(add_dependencies)
 add_RunCMake_test(build_command)
 add_RunCMake_test(export)
 add_RunCMake_test(cmake_minimum_required)
+add_RunCMake_test(file)
 add_RunCMake_test(find_package)
 add_RunCMake_test(get_filename_component)
 add_RunCMake_test(if)

+ 3 - 0
Tests/RunCMake/file/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.0)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)

+ 1 - 0
Tests/RunCMake/file/FileOpenFailRead-result.txt

@@ -0,0 +1 @@
+1

+ 6 - 0
Tests/RunCMake/file/FileOpenFailRead-stderr.txt

@@ -0,0 +1,6 @@
+CMake Error at FileOpenFailRead.cmake:[0-9]+ \(file\):
+  file failed to open for reading \(.*\):
+
+    .*/Tests/RunCMake/file/does_not_exist/file.txt
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 1 - 0
Tests/RunCMake/file/FileOpenFailRead.cmake

@@ -0,0 +1 @@
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/does_not_exist/file.txt" content)

+ 3 - 0
Tests/RunCMake/file/RunCMakeTest.cmake

@@ -0,0 +1,3 @@
+include(RunCMake)
+
+run_cmake(FileOpenFailRead)