Browse Source

file(CREATE_LINK): Refactor error handling for removal of destination

Avoid relying on global state.
Brad King 1 month ago
parent
commit
f719a36bc0
1 changed files with 12 additions and 10 deletions
  1. 12 10
      Source/cmFileCommand.cxx

+ 12 - 10
Source/cmFileCommand.cxx

@@ -3233,18 +3233,20 @@ bool HandleCreateLinkCommand(std::vector<std::string> const& args,
   }
 
   // Check if the new file already exists and remove it.
-  if (cmSystemTools::PathExists(newFileName) &&
-      !cmSystemTools::RemoveFile(newFileName)) {
-    auto err = cmStrCat("Failed to create link '", newFileName,
-                        "' because existing path cannot be removed: ",
-                        cmSystemTools::GetLastSystemError(), '\n');
+  if (cmSystemTools::PathExists(newFileName)) {
+    cmsys::Status rmStatus = cmSystemTools::RemoveFile(newFileName);
+    if (!rmStatus) {
+      auto err = cmStrCat("Failed to create link '", newFileName,
+                          "' because existing path cannot be removed: ",
+                          rmStatus.GetString(), '\n');
 
-    if (!arguments.Result.empty()) {
-      status.GetMakefile().AddDefinition(arguments.Result, err);
-      return true;
+      if (!arguments.Result.empty()) {
+        status.GetMakefile().AddDefinition(arguments.Result, err);
+        return true;
+      }
+      status.SetError(err);
+      return false;
     }
-    status.SetError(err);
-    return false;
   }
 
   // Whether the operation completed successfully.