From cd0c97bdc5994664dae21f929d37e026b52e8262 Mon Sep 17 00:00:00 2001 From: Konstanty Misiak Date: Mon, 22 Aug 2022 13:40:26 +0000 Subject: [PATCH] Support for non-Latin characters in application path for AIL Signed-off-by: Konstanty Misiak --- .../ail/windows/ail_configuration_windows.cpp | 33 +++++++++---------- .../ail/windows/ail_windows_tests.cpp | 18 +++++++++- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/shared/source/ail/windows/ail_configuration_windows.cpp b/shared/source/ail/windows/ail_configuration_windows.cpp index 7591e753dc..1f5d0896c2 100644 --- a/shared/source/ail/windows/ail_configuration_windows.cpp +++ b/shared/source/ail/windows/ail_configuration_windows.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -18,23 +18,22 @@ bool AILConfiguration::initProcessExecutableName() { auto status = SysCalls::getModuleFileName(nullptr, processFilenameW, MAX_PATH); if (status != 0) { - std::wcstombs(processFilename, processFilenameW, MAX_PATH); + std::wstring_view pathView(processFilenameW); + + auto lastPosition = pathView.find_last_of(L"\\"); + + pathView.remove_prefix(lastPosition + 1u); + + lastPosition = pathView.find(L".exe"); + + if (lastPosition != std::wstring_view::npos) { + pathView.remove_suffix(pathView.size() - lastPosition); + } + + std::wcstombs(processFilename, pathView.data(), pathView.size()); + processName = processFilename; } - std::string_view pathView(processFilename); - - auto lastPosition = pathView.find_last_of("\\"); - - pathView.remove_prefix(lastPosition + 1u); - - lastPosition = pathView.find(".exe"); - - if (lastPosition != std::string_view::npos) { - pathView.remove_suffix(pathView.size() - lastPosition); - } - - processName = pathView; - return status; } -} // namespace NEO \ No newline at end of file +} // namespace NEO diff --git a/shared/test/unit_test/ail/windows/ail_windows_tests.cpp b/shared/test/unit_test/ail/windows/ail_windows_tests.cpp index 9b81efcb2f..93d25433ae 100644 --- a/shared/test/unit_test/ail/windows/ail_windows_tests.cpp +++ b/shared/test/unit_test/ail/windows/ail_windows_tests.cpp @@ -11,6 +11,7 @@ #include "shared/test/common/test_macros/hw_test.h" namespace NEO { + using AILTests = ::testing::Test; namespace SysCalls { extern const wchar_t *currentLibraryPath; @@ -49,4 +50,19 @@ HWTEST2_F(AILTests, givenValidApplicationPathWithoutLongNameWhenAILinitProcessEx EXPECT_EQ("application", ailTemp.processName); } -} // namespace NEO \ No newline at end of file + +HWTEST2_F(AILTests, givenApplicationPathWithNonLatinCharactersWhenAILinitProcessExecutableNameThenProperProcessNameIsReturned, IsAtLeastGen12lp) { + VariableBackup applicationPathBackup(&SysCalls::currentLibraryPath); + applicationPathBackup = L"C\\\u4E20\u4E24\\application"; + + VariableBackup ailConfigurationBackup(&ailConfigurationTable[productFamily]); + + AILMock ailTemp; + ailConfigurationTable[productFamily] = &ailTemp; + + EXPECT_EQ(ailTemp.initProcessExecutableName(), true); + + EXPECT_EQ("application", ailTemp.processName); +} + +} // namespace NEO