From faa46b0633bc34058bfbcc416191ba9deb8b37c8 Mon Sep 17 00:00:00 2001 From: Christophe Date: Thu, 25 May 2023 12:28:36 +0200 Subject: [PATCH] layer: fix env var delimiters --- src/layer/layer_settings_util.cpp | 14 ++++++++++---- src/layer/layer_settings_util.hpp | 3 +++ tests/layer/test_setting_util.cpp | 4 +++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/layer/layer_settings_util.cpp b/src/layer/layer_settings_util.cpp index d0244f2..7ecc0df 100644 --- a/src/layer/layer_settings_util.cpp +++ b/src/layer/layer_settings_util.cpp @@ -112,13 +112,19 @@ std::string GetEnvSettingName(const char *layer_key, const char *setting_key, Tr return result.str(); } +char GetEnvDelimiter() { +#ifdef WIN32 // a define is necessary because ':' is used for disk drives on Windows path + return ';'; +#else + return ':'; +#endif +} + char FindDelimiter(const std::string& s) { if (s.find(',') != std::string::npos) { return ','; - } else if (s.find(':') != std::string::npos) { // Typically Unix env variables - return ':'; - } else if (s.find(';') != std::string::npos) { // Typically Win32 env variables - return ';'; + } else if (s.find(GetEnvDelimiter()) != std::string::npos) { + return GetEnvDelimiter(); } else { return ','; } diff --git a/src/layer/layer_settings_util.hpp b/src/layer/layer_settings_util.hpp index 3230e08..401b858 100644 --- a/src/layer/layer_settings_util.hpp +++ b/src/layer/layer_settings_util.hpp @@ -50,6 +50,9 @@ namespace vl { // Find the delimiter (, ; :) in a string made of tokens. Return ',' by default char FindDelimiter(const std::string &s); + // ';' on WIN32 and ':' on Unix + char GetEnvDelimiter(); + // Remove whitespaces at the beginning of the end std::string TrimWhitespace(const std::string &s); diff --git a/tests/layer/test_setting_util.cpp b/tests/layer/test_setting_util.cpp index 370101e..4a926c4 100644 --- a/tests/layer/test_setting_util.cpp +++ b/tests/layer/test_setting_util.cpp @@ -68,11 +68,13 @@ TEST(test_layer_settings_util, FindDelimiter) { char A = vl::FindDelimiter("VALUE_A,VALUE_B"); EXPECT_EQ(',', A); +#ifdef WIN32 char B = vl::FindDelimiter("VALUE_A;VALUE_B"); EXPECT_EQ(';', B); - +#else char C = vl::FindDelimiter("VALUE_A:VALUE_B"); EXPECT_EQ(':', C); +#endif EXPECT_EQ(',', vl::FindDelimiter("VALUE_A"));