diff options
-rw-r--r-- | Source/CTest/cmCTestCoverageHandler.cxx | 6 | ||||
-rw-r--r-- | Source/CTest/cmCTestLaunch.cxx | 9 | ||||
-rw-r--r-- | Source/cmExecuteProcessCommand.cxx | 13 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 12 | ||||
-rw-r--r-- | Source/cmUVProcessChain.cxx | 19 | ||||
-rw-r--r-- | Source/cmUVProcessChain.h | 6 | ||||
-rw-r--r-- | Source/cmake.cxx | 7 | ||||
-rw-r--r-- | Source/cmcmd.cxx | 9 | ||||
-rw-r--r-- | Tests/CMakeLib/testUVProcessChain.cxx | 5 | ||||
-rw-r--r-- | Tests/CMakeLib/testUVProcessChainHelper.cxx | 4 |
10 files changed, 38 insertions, 52 deletions
diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx index 1aa49cf..f9f9add 100644 --- a/Source/CTest/cmCTestCoverageHandler.cxx +++ b/Source/CTest/cmCTestCoverageHandler.cxx @@ -21,8 +21,6 @@ #include "cmsys/Glob.hxx" #include "cmsys/RegularExpression.hxx" -#include "cm_fileno.hxx" - #include "cmCTest.h" #include "cmDuration.h" #include "cmGeneratedFileStream.h" @@ -1887,9 +1885,9 @@ int cmCTestCoverageHandler::RunBullseyeCommand( cmsys::SystemTools::Fopen(stderrFile, "w"), fclose); builder.AddCommand(args) .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, - cm_fileno(stdoutHandle.get())) + stdoutHandle.get()) .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(stderrHandle.get())); + stderrHandle.get()); // since we set the output file names wait for it to end auto chain = builder.Start(); chain.Wait(); diff --git a/Source/CTest/cmCTestLaunch.cxx b/Source/CTest/cmCTestLaunch.cxx index 6b13ad1..9669d76 100644 --- a/Source/CTest/cmCTestLaunch.cxx +++ b/Source/CTest/cmCTestLaunch.cxx @@ -13,8 +13,6 @@ #include "cmsys/FStream.hxx" #include "cmsys/RegularExpression.hxx" -#include "cm_fileno.hxx" - #include "cmCTestLaunchReporter.h" #include "cmGlobalGenerator.h" #include "cmMakefile.h" @@ -158,11 +156,8 @@ void cmCTestLaunch::RunChild() cmsys::ofstream ferr; if (this->Reporter.Passthru) { // In passthru mode we just share the output pipes. - builder - .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, - cm_fileno(stdout)) - .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(stderr)); + builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout) + .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr); } else { // In full mode we record the child output pipes to log files. builder.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT) diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx index da6def9..2b923df 100644 --- a/Source/cmExecuteProcessCommand.cxx +++ b/Source/cmExecuteProcessCommand.cxx @@ -17,8 +17,6 @@ #include <cm3p/uv.h> -#include "cm_fileno.hxx" - #include "cmArgumentParser.h" #include "cmExecutionStatus.h" #include "cmList.h" @@ -183,11 +181,10 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args, inputFile.reset(cmsys::SystemTools::Fopen(inputFilename, "rb")); if (inputFile) { builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, - cm_fileno(inputFile.get())); + inputFile.get()); } } else { - builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, - cm_fileno(stdin)); + builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, stdin); } std::unique_ptr<FILE, int (*)(FILE*)> outputFile(nullptr, fclose); @@ -195,7 +192,7 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args, outputFile.reset(cmsys::SystemTools::Fopen(outputFilename, "wb")); if (outputFile) { builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, - cm_fileno(outputFile.get())); + outputFile.get()); } } else { if (arguments.OutputVariable == arguments.ErrorVariable && @@ -211,13 +208,13 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args, if (errorFilename == outputFilename) { if (outputFile) { builder.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(outputFile.get())); + outputFile.get()); } } else { errorFile.reset(cmsys::SystemTools::Fopen(errorFilename, "wb")); if (errorFile) { builder.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(errorFile.get())); + errorFile.get()); } } } else if (arguments.ErrorVariable.empty() || diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index fca8186..bd914e5 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -25,8 +25,6 @@ #include <cm3p/uv.h> -#include "cm_fileno.hxx" - #include "cmDuration.h" #include "cmELF.h" #include "cmMessageMetadata.h" @@ -576,8 +574,7 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string> const& command, cmDuration timeout, Encoding encoding) { cmUVProcessChainBuilder builder; - builder - .SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, cm_fileno(stdin)) + builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, stdin) .AddCommand(command); if (dir) { builder.SetWorkingDirectory(dir); @@ -586,11 +583,8 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string> const& command, if (outputflag == OUTPUT_PASSTHROUGH) { captureStdOut = nullptr; captureStdErr = nullptr; - builder - .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, - cm_fileno(stdout)) - .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(stderr)); + builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout) + .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr); } else if (outputflag == OUTPUT_MERGE || (captureStdErr && captureStdErr == captureStdOut)) { builder.SetMergedBuiltinStreams(); diff --git a/Source/cmUVProcessChain.cxx b/Source/cmUVProcessChain.cxx index 4c72261..0412f45 100644 --- a/Source/cmUVProcessChain.cxx +++ b/Source/cmUVProcessChain.cxx @@ -12,6 +12,8 @@ #include <cm3p/uv.h> +#include "cm_fileno.hxx" + #include "cmGetPipes.h" #include "cmUVHandlePtr.h" @@ -58,12 +60,7 @@ struct cmUVProcessChain::InternalData void Finish(); }; -cmUVProcessChainBuilder::cmUVProcessChainBuilder() -{ - this->SetNoStream(Stream_INPUT) - .SetNoStream(Stream_OUTPUT) - .SetNoStream(Stream_ERROR); -} +cmUVProcessChainBuilder::cmUVProcessChainBuilder() = default; cmUVProcessChainBuilder& cmUVProcessChainBuilder::AddCommand( const std::vector<std::string>& arguments) @@ -136,6 +133,16 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalStream( return *this; } +cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalStream( + Stream stdio, FILE* stream) +{ + int fd = cm_fileno(stream); + if (fd >= 0) { + return this->SetExternalStream(stdio, fd); + } + return this->SetNoStream(stdio); +} + cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetMergedBuiltinStreams() { this->MergedBuiltinStreams = true; diff --git a/Source/cmUVProcessChain.h b/Source/cmUVProcessChain.h index 139588b..65816e2 100644 --- a/Source/cmUVProcessChain.h +++ b/Source/cmUVProcessChain.h @@ -7,6 +7,7 @@ #include <array> #include <cstddef> // IWYU pragma: keep #include <cstdint> +#include <cstdio> #include <memory> #include <string> #include <utility> @@ -36,6 +37,7 @@ public: cmUVProcessChainBuilder& SetBuiltinStream(Stream stdio); cmUVProcessChainBuilder& SetMergedBuiltinStreams(); cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd); + cmUVProcessChainBuilder& SetExternalStream(Stream stdio, FILE* stream); cmUVProcessChainBuilder& SetWorkingDirectory(std::string dir); uv_loop_t* GetLoop() const; @@ -54,8 +56,8 @@ private: struct StdioConfiguration { - StdioType Type; - int FileDescriptor; + StdioType Type = None; + int FileDescriptor = -1; }; struct ProcessConfiguration diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 7ab7600..88fac8d 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -27,7 +27,6 @@ #include "cmsys/Glob.hxx" #include "cmsys/RegularExpression.hxx" -#include "cm_fileno.hxx" #include "cm_sys_stat.h" #include "cmBuildOptions.h" @@ -3934,10 +3933,8 @@ std::function<int()> cmake::BuildWorkflowStep( { cmUVProcessChainBuilder builder; builder.AddCommand(args) - .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, - cm_fileno(stdout)) - .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(stderr)); + .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout) + .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr); return [builder]() -> int { auto chain = builder.Start(); chain.Wait(); diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index bcf7462..25b2ced 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -11,8 +11,6 @@ #include <cm3p/uv.h> #include <fcntl.h> -#include "cm_fileno.hxx" - #include "cmCommandLineArgument.h" #include "cmConsoleBuf.h" #include "cmCryptoHash.h" @@ -1917,11 +1915,8 @@ int cmcmd::ExecuteLinkScript(std::vector<std::string> const& args) cmUVProcessChainBuilder builder; // Children should share stdout and stderr with this process. - builder - .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, - cm_fileno(stdout)) - .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, - cm_fileno(stderr)); + builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout) + .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr); // Setup this command line. std::vector<std::string> args2; diff --git a/Tests/CMakeLib/testUVProcessChain.cxx b/Tests/CMakeLib/testUVProcessChain.cxx index 6014889..b669f65 100644 --- a/Tests/CMakeLib/testUVProcessChain.cxx +++ b/Tests/CMakeLib/testUVProcessChain.cxx @@ -12,8 +12,6 @@ #include <cm3p/uv.h> -#include "cm_fileno.hxx" - #include "cmGetPipes.h" #include "cmStringAlgorithms.h" #include "cmUVHandlePtr.h" @@ -641,8 +639,7 @@ bool testUVProcessChainInputFile(const char* helperCommand) cmUVProcessChainBuilder builder; builder.AddCommand({ helperCommand, "dedup" }) - .SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, - cm_fileno(f.get())) + .SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, f.get()) .SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT); auto chain = builder.Start(); diff --git a/Tests/CMakeLib/testUVProcessChainHelper.cxx b/Tests/CMakeLib/testUVProcessChainHelper.cxx index b53cac4..1b4adb7 100644 --- a/Tests/CMakeLib/testUVProcessChainHelper.cxx +++ b/Tests/CMakeLib/testUVProcessChainHelper.cxx @@ -9,6 +9,10 @@ #include "cmSystemTools.h" +#ifdef _WIN32 +# include <windows.h> +#endif + static std::string getStdin() { char buffer[1024]; |