aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-01-22 12:56:08 +0100
committerGitHub Enterprise <[email protected]>2026-01-22 12:56:08 +0100
commita735026f7376456eba7fb55e0c70c3353ea9c25a (patch)
tree56524229d934c4e08236598ad9abb0ba6c13bc8d /src
parentfixed bad merge in CHANGELOG.md (diff)
downloadzen-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.cpp24
-rw-r--r--src/zen/zen.cpp21
-rw-r--r--src/zenhttp/servers/httpasio.cpp6
-rw-r--r--src/zenserver-test/zenserver-test.cpp3
-rw-r--r--src/zenserver/main.cpp7
-rw-r--r--src/zenutil/commandlineoptions.cpp27
-rw-r--r--src/zenutil/include/zenutil/commandlineoptions.h13
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