From 8a9e518371df03b3f382e0fe869da83751fdda0b Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Wed, 10 Nov 2021 17:33:22 -0500 Subject: Interprocess communication via pipes (#2009) * #include an absolute path didn't work - because paths were taken to always be relative. * Use 'Process' to communicate with an command line tool. * Remove slang-win-stream * Tidy up windows ProcessUtil. * First version of BufferedReadStream. * Windows working IPC for steams. * Test proxy count option. * Split Process/ProcessUtil. Process is platform dependant. ProcessUtil are functions that are platform independent. * First implementation of Unix Process interface. * Unix process compiles on cygwin. * Fix typo in unix process. * Separate unix pipe stream error of invalid access, from pipe availability. * Fix in standard line extraction. * Make fd non blocking. * Fix issues with Windows Process streams. * Added UnixPipe. * Some fixes around UnixPipeStream. * Make a unix stream closed explicit. * Hack to debug linux process/stream. * Revert to old linux pipe handling. * Pass executable path for unit tests. Split out CommandLine into own source. * Small improvements in process/command line. * Check process behavior with crash. * Make stderr and stdout unbuffered for crash testing. * Only turn disable buffering in crash test. * Disable crash test on CI. * Fix crash on clang/linux. * Enable crash test. Remove _appendBuffer as can use StreamUtil functionality. --- source/core/slang-command-line.cpp | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 source/core/slang-command-line.cpp (limited to 'source/core/slang-command-line.cpp') diff --git a/source/core/slang-command-line.cpp b/source/core/slang-command-line.cpp new file mode 100644 index 000000000..419c031ab --- /dev/null +++ b/source/core/slang-command-line.cpp @@ -0,0 +1,54 @@ +// slang-command-line.cpp +#include "slang-command-line.h" + +#include "slang-process.h" + +#include "slang-string.h" +#include "slang-string-escape-util.h" +#include "slang-string-util.h" + +#include "../../slang-com-helper.h" + +namespace Slang { + +void CommandLine::addPrefixPathArg(const char* prefix, const String& path, const char* pathPostfix) +{ + StringBuilder builder; + builder << prefix << path; + if (pathPostfix) + { + // Work out the path with the postfix + builder << pathPostfix; + } + addArg(builder.ProduceString()); +} + +void CommandLine::setExecutable(const String& dir, const String& name) +{ + StringBuilder builder; + Path::combineIntoBuilder(dir.getUnownedSlice(), name.getUnownedSlice(), builder); + builder << Process::getExecutableSuffix(); + setExecutablePath(builder.ProduceString()); +} + +void CommandLine::append(StringBuilder& out) const +{ + auto escapeHandler = Process::getEscapeHandler(); + + StringEscapeUtil::appendMaybeQuoted(escapeHandler, m_executable.getUnownedSlice(), out); + + for (const auto& arg : m_args) + { + out << " "; + StringEscapeUtil::appendMaybeQuoted(escapeHandler, arg.getUnownedSlice(), out); + } +} + +String CommandLine::toString() const +{ + StringBuilder buf; + append(buf); + return buf.ProduceString(); +} + +} // namespace Slang -- cgit v1.2.3