From acc17776384837b243f429ced53e1da47aff2693 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 24 Jul 2025 12:38:52 +0200 Subject: [PATCH] Add shared utility for command line arguments merging --- Source/Engine/Main/Default/main.cpp | 17 ++----------- Source/Engine/Main/MainUtil.h | 37 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 Source/Engine/Main/MainUtil.h diff --git a/Source/Engine/Main/Default/main.cpp b/Source/Engine/Main/Default/main.cpp index 1791f6ce1..ba9db262a 100644 --- a/Source/Engine/Main/Default/main.cpp +++ b/Source/Engine/Main/Default/main.cpp @@ -3,24 +3,11 @@ #if PLATFORM_LINUX || PLATFORM_MAC || PLATFORM_IOS #include "Engine/Engine/Engine.h" -#include "Engine/Core/Types/StringBuilder.h" +#include "Engine/Main/MainUtil.h" int main(int argc, char* argv[]) { - // Join the arguments - StringBuilder args; - for (int i = 1; i < argc; i++) - { - String arg; - arg.SetUTF8(argv[i], StringUtils::Length(argv[i])); - args.Append(arg); - - if (i + 1 != argc) - args.Append(TEXT(' ')); - } - args.Append(TEXT('\0')); - - return Engine::Main(*args); + return Engine::Main(GetCommandLine(argc, argv)); } #endif diff --git a/Source/Engine/Main/MainUtil.h b/Source/Engine/Main/MainUtil.h new file mode 100644 index 000000000..668c69c3e --- /dev/null +++ b/Source/Engine/Main/MainUtil.h @@ -0,0 +1,37 @@ +// Copyright (c) Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Platform/StringUtils.h" + +const Char* GetCommandLine(int argc, char* argv[]) +{ + int32 length = 0; + for (int i = 1; argc > 1 && i < argc; i++) + { + length += StringUtils::Length((const char*)argv[i]); + if (i + 1 != argc) + length++; + } + const Char* cmdLine; + if (length != 0) + { + Char* str = (Char*)malloc(length * sizeof(Char)); + cmdLine = str; + for (int i = 1; i < argc; i++) + { + length = StringUtils::Length((const char*)argv[i]); + int32 strLen = 0; + StringUtils::ConvertANSI2UTF16(argv[i], str, length, strLen); + str += strLen; + if (i + 1 != argc) + *str++ = TEXT(' '); + } + *str = TEXT('\0'); + } + else + { + cmdLine = TEXT(""); + } + return cmdLine; +}