diff options
| author | Dan Engelbrecht <[email protected]> | 2026-01-22 12:56:08 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-01-22 12:56:08 +0100 |
| commit | a735026f7376456eba7fb55e0c70c3353ea9c25a (patch) | |
| tree | 56524229d934c4e08236598ad9abb0ba6c13bc8d /src | |
| parent | fixed bad merge in CHANGELOG.md (diff) | |
| download | zen-a735026f7376456eba7fb55e0c70c3353ea9c25a.tar.xz zen-a735026f7376456eba7fb55e0c70c3353ea9c25a.zip | |
hotfix 5.7.18 (#730)
* make sure we properly convert command line args for zenserver as well
* make sure we *add* wildcards/excludes in addition to defaults
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/cmds/builds_cmd.cpp | 24 | ||||
| -rw-r--r-- | src/zen/zen.cpp | 21 | ||||
| -rw-r--r-- | src/zenhttp/servers/httpasio.cpp | 6 | ||||
| -rw-r--r-- | src/zenserver-test/zenserver-test.cpp | 3 | ||||
| -rw-r--r-- | src/zenserver/main.cpp | 7 | ||||
| -rw-r--r-- | src/zenutil/commandlineoptions.cpp | 27 | ||||
| -rw-r--r-- | src/zenutil/include/zenutil/commandlineoptions.h | 13 |
7 files changed, 62 insertions, 39 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp index c4a5a998a..f859a618b 100644 --- a/src/zen/cmds/builds_cmd.cpp +++ b/src/zen/cmds/builds_cmd.cpp @@ -2892,9 +2892,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) }; auto ParseFileFilters = [&](std::vector<std::string>& OutIncludeWildcards, std::vector<std::string>& OutExcludeWildcards) { - auto SplitWildcard = [](const std::string_view Wildcard) -> std::vector<std::string> { - std::vector<std::string> Wildcards; - ForEachStrTok(Wildcard, ';', [&Wildcards](std::string_view Wildcard) { + auto SplitAndAppendWildcard = [](const std::string_view Wildcard, std::vector<std::string>& Output) { + ForEachStrTok(Wildcard, ';', [&Output](std::string_view Wildcard) { if (!Wildcard.empty()) { std::string CleanWildcard(ToLower(Wildcard)); @@ -2911,21 +2910,19 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) CleanWildcard = CleanWildcard.substr(2); } - Wildcards.emplace_back(std::move(CleanWildcard)); + Output.emplace_back(std::move(CleanWildcard)); } return true; }); - return Wildcards; }; - OutIncludeWildcards = SplitWildcard(m_IncludeWildcard); - OutExcludeWildcards = SplitWildcard(m_ExcludeWildcard); + SplitAndAppendWildcard(m_IncludeWildcard, OutIncludeWildcards); + SplitAndAppendWildcard(m_ExcludeWildcard, OutExcludeWildcards); }; auto ParseExcludeFolderAndExtension = [&](std::vector<std::string>& OutExcludeFolders, std::vector<std::string>& OutExcludeExtensions) { - auto SplitExclusion = [](const std::string_view Input) -> std::vector<std::string> { - std::vector<std::string> Exclusions; - ForEachStrTok(Input, ";,", [&Exclusions](std::string_view Exclusion) { + auto SplitAndAppendExclusion = [](const std::string_view Input, std::vector<std::string>& Output) { + ForEachStrTok(Input, ";,", [&Output](std::string_view Exclusion) { if (!Exclusion.empty()) { std::string CleanExclusion(ToLower(Exclusion)); @@ -2933,15 +2930,14 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) { CleanExclusion = CleanExclusion.substr(1, CleanExclusion.length() - 2); } - Exclusions.emplace_back(std::move(CleanExclusion)); + Output.emplace_back(std::move(CleanExclusion)); } return true; }); - return Exclusions; }; - OutExcludeFolders = SplitExclusion(m_ExcludeFolders); - OutExcludeExtensions = SplitExclusion(m_ExcludeExtensions); + SplitAndAppendExclusion(m_ExcludeFolders, OutExcludeFolders); + SplitAndAppendExclusion(m_ExcludeExtensions, OutExcludeExtensions); }; auto ParseDiffPath = [&]() { diff --git a/src/zen/zen.cpp b/src/zen/zen.cpp index c03ae476f..09a2e4f91 100644 --- a/src/zen/zen.cpp +++ b/src/zen/zen.cpp @@ -302,26 +302,7 @@ main(int argc, char** argv) zen::SetCurrentThreadName("main"); - std::vector<std::string> Args; -#if ZEN_PLATFORM_WINDOWS - LPWSTR RawCommandLine = GetCommandLineW(); - std::string CommandLine = zen::WideToUtf8(RawCommandLine); - Args = zen::ParseCommandLine(CommandLine); -#else - Args.reserve(argc); - for (int I = 0; I < argc; I++) - { - std::string Arg(argv[I]); - if ((!Arg.empty()) && (Arg != " ")) - { - Args.emplace_back(std::move(Arg)); - } - } -#endif - std::vector<char*> RawArgs = zen::StripCommandlineQuotes(Args); - - argc = gsl::narrow<int>(RawArgs.size()); - argv = RawArgs.data(); + zen::CommandLineConverter ArgConverter(argc, argv); using namespace zen; using namespace std::literals; diff --git a/src/zenhttp/servers/httpasio.cpp b/src/zenhttp/servers/httpasio.cpp index be4e73576..b11eebc1a 100644 --- a/src/zenhttp/servers/httpasio.cpp +++ b/src/zenhttp/servers/httpasio.cpp @@ -163,8 +163,8 @@ Log() #endif #if defined(ASIO_HAS_WINDOWS_OVERLAPPED_PTR) -# define ZEN_USE_TRANSMITFILE 1 -# define ZEN_USE_ASYNC_SENDFILE ASIO_HAS_FILE +# define ZEN_USE_TRANSMITFILE 0 +# define ZEN_USE_ASYNC_SENDFILE 0 #else # define ZEN_USE_TRANSMITFILE 0 # define ZEN_USE_ASYNC_SENDFILE 0 @@ -713,7 +713,7 @@ public: #else // This should never occur unless we compile with one // of the options above - ZEN_ASSERT("invalid file reference in response"); + ZEN_WARN("invalid file reference in response"); #endif return; diff --git a/src/zenserver-test/zenserver-test.cpp b/src/zenserver-test/zenserver-test.cpp index 6f207b184..9a42bb73d 100644 --- a/src/zenserver-test/zenserver-test.cpp +++ b/src/zenserver-test/zenserver-test.cpp @@ -17,6 +17,7 @@ # include <zencore/timer.h> # include <zenhttp/httpclient.h> # include <zenhttp/packageformat.h> +# include <zenutil/commandlineoptions.h> # include <zenutil/logging/testformatter.h> # include <zenutil/zenserverprocess.h> @@ -68,6 +69,8 @@ main(int argc, char** argv) using namespace std::literals; using namespace zen; + zen::CommandLineConverter ArgConverter(argc, argv); + # if ZEN_PLATFORM_LINUX IgnoreChildSignals(); # endif diff --git a/src/zenserver/main.cpp b/src/zenserver/main.cpp index 996f96da8..3a58d1f4a 100644 --- a/src/zenserver/main.cpp +++ b/src/zenserver/main.cpp @@ -19,6 +19,7 @@ #include <zencore/thread.h> #include <zencore/trace.h> #include <zentelemetry/otlptrace.h> +#include <zenutil/commandlineoptions.h> #include <zenutil/service.h> #include "diag/logging.h" @@ -195,12 +196,12 @@ AppMain(int argc, char* argv[]) } catch (const AssertException& AssertEx) { - fprintf(stderr, ZEN_APP_NAME " ERROR: Caught assert exception in main: '%s'", AssertEx.FullDescription().c_str()); + fprintf(stderr, ZEN_APP_NAME " ERROR: Caught assert exception in main: '%s'\n", AssertEx.FullDescription().c_str()); return 1; } catch (const std::exception& Ex) { - fprintf(stderr, ZEN_APP_NAME " ERROR: Caught exception in main: '%s'", Ex.what()); + fprintf(stderr, ZEN_APP_NAME " ERROR: Caught exception in main: '%s'\n", Ex.what()); return 1; } @@ -233,6 +234,8 @@ main(int argc, char* argv[]) setlocale(LC_ALL, "en_us.UTF8"); #endif // ZEN_PLATFORM_WINDOWS + zen::CommandLineConverter ArgConverter(argc, argv); + using namespace zen; using namespace std::literals; diff --git a/src/zenutil/commandlineoptions.cpp b/src/zenutil/commandlineoptions.cpp index 81699361b..d94564843 100644 --- a/src/zenutil/commandlineoptions.cpp +++ b/src/zenutil/commandlineoptions.cpp @@ -2,7 +2,11 @@ #include <zenutil/commandlineoptions.h> +#include <zencore/string.h> #include <filesystem> + +#include <zencore/windows.h> + #if ZEN_WITH_TESTS # include <zencore/testing.h> #endif // ZEN_WITH_TESTS @@ -160,6 +164,29 @@ RemoveQuotes(const std::string_view& Arg) return Arg; } +CommandLineConverter::CommandLineConverter(int& argc, char**& argv) +{ +#if ZEN_PLATFORM_WINDOWS + LPWSTR RawCommandLine = GetCommandLineW(); + std::string CommandLine = WideToUtf8(RawCommandLine); + Args = ParseCommandLine(CommandLine); +#else + Args.reserve(argc); + for (int I = 0; I < argc; I++) + { + std::string Arg(argv[I]); + if ((!Arg.empty()) && (Arg != " ")) + { + Args.emplace_back(std::move(Arg)); + } + } +#endif + RawArgs = StripCommandlineQuotes(Args); + + argc = static_cast<int>(RawArgs.size()); + argv = RawArgs.data(); +} + #if ZEN_WITH_TESTS void diff --git a/src/zenutil/include/zenutil/commandlineoptions.h b/src/zenutil/include/zenutil/commandlineoptions.h index d6a171242..01cceedb1 100644 --- a/src/zenutil/include/zenutil/commandlineoptions.h +++ b/src/zenutil/include/zenutil/commandlineoptions.h @@ -22,6 +22,19 @@ std::vector<char*> StripCommandlineQuotes(std::vector<std::string>& InOutArgs) std::filesystem::path StringToPath(const std::string_view& Path); std::string_view RemoveQuotes(const std::string_view& Arg); +class CommandLineConverter +{ +public: + CommandLineConverter(int& argc, char**& argv); + + int ArgC = 0; + char** ArgV = nullptr; + +private: + std::vector<std::string> Args; + std::vector<char*> RawArgs; +}; + void commandlineoptions_forcelink(); // internal } // namespace zen |