diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/CMakeLists.txt b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/CMakeLists.txt index 87779e7f8ae81..6bd7a266fbf51 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/CMakeLists.txt +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/CMakeLists.txt @@ -20,6 +20,8 @@ if(NEED_LINK_DL) endif() include_directories(${Boost_INCLUDE_DIRS} ../../include) -add_library(common_obj OBJECT status.cc sasl_digest_md5.cc ioservice_impl.cc options.cc configuration.cc configuration_loader.cc hdfs_configuration.cc uri.cc util.cc retry_policy.cc cancel_tracker.cc logging.cc libhdfs_events_impl.cc auth_info.cc namenode_info.cc statinfo.cc fsinfo.cc content_summary.cc locks.cc config_parser.cc) -add_library(common $ $) +add_library(common_obj OBJECT $ status.cc sasl_digest_md5.cc ioservice_impl.cc options.cc configuration.cc configuration_loader.cc hdfs_configuration.cc uri.cc util.cc retry_policy.cc cancel_tracker.cc logging.cc libhdfs_events_impl.cc auth_info.cc namenode_info.cc statinfo.cc fsinfo.cc content_summary.cc locks.cc config_parser.cc) +add_library(common $ $ $) target_link_libraries(common ${LIB_DL}) +target_include_directories(common_obj PRIVATE ../../lib) +target_include_directories(common PRIVATE ../../lib) diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration.cc index 298de1e3aabfe..947214bdbd50a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration.cc @@ -33,6 +33,7 @@ #include "configuration.h" #include "hdfspp/uri.h" +#include "x-platform/syscall.h" #include #include @@ -124,10 +125,10 @@ optional Configuration::GetBool(const std::string& key) const { return optional(); } - if (!strcasecmp(raw->c_str(), "true")) { + if (XPlatform::Syscall::StringCompareIgnoreCase(*raw, "true")) { return std::experimental::make_optional(true); } - if (!strcasecmp(raw->c_str(), "false")) { + if (XPlatform::Syscall::StringCompareIgnoreCase(*raw, "false")) { return std::experimental::make_optional(false); } diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration_loader.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration_loader.cc index 691d2ff719542..5301137505af1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration_loader.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/configuration_loader.cc @@ -18,6 +18,7 @@ #include "configuration_loader.h" #include "common/logging.h" +#include "x-platform/syscall.h" #include #include @@ -46,17 +47,17 @@ bool is_valid_bool(const std::string& raw) { return false; } - if (!strcasecmp(raw.c_str(), "true")) { + if (XPlatform::Syscall::StringCompareIgnoreCase(raw, "true")) { return true; } - if (!strcasecmp(raw.c_str(), "false")) { + if (XPlatform::Syscall::StringCompareIgnoreCase(raw, "false")) { return true; } return false; } bool str_to_bool(const std::string& raw) { - if (!strcasecmp(raw.c_str(), "true")) { + if (XPlatform::Syscall::StringCompareIgnoreCase(raw, "true")) { return true; } diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/fs/filesystem.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/fs/filesystem.cc index 741d6c783b62e..e92a9ee48d6b9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/fs/filesystem.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/fs/filesystem.cc @@ -298,7 +298,7 @@ void FileSystemImpl::Connect(const std::string &server, void FileSystemImpl::ConnectToDefaultFs(const std::function &handler) { std::string scheme = options_.defaultFS.get_scheme(); - if (strcasecmp(scheme.c_str(), "hdfs") != 0) { + if (!XPlatform::Syscall::StringCompareIgnoreCase(scheme, "hdfs")) { std::string error_message; error_message += "defaultFS of [" + options_.defaultFS.str() + "] is not supported"; handler(Status::InvalidArgument(error_message.c_str()), nullptr); diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/CMakeLists.txt b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/CMakeLists.txt index e5a26fb449da4..b50134eda9536 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/CMakeLists.txt +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/CMakeLists.txt @@ -16,7 +16,7 @@ # limitations under the License. # -list(APPEND rpc_object_items rpc_connection_impl.cc rpc_engine.cc namenode_tracker.cc request.cc sasl_protocol.cc sasl_engine.cc) +list(APPEND rpc_object_items $ rpc_connection_impl.cc rpc_engine.cc namenode_tracker.cc request.cc sasl_protocol.cc sasl_engine.cc) if (CMAKE_USING_CYRUS_SASL) list(APPEND rpc_object_items cyrus_sasl_engine.cc) endif (CMAKE_USING_CYRUS_SASL) @@ -25,7 +25,8 @@ if (CMAKE_USING_GSASL) endif (CMAKE_USING_GSASL) add_library(rpc_obj OBJECT ${rpc_object_items}) - +target_include_directories(rpc_obj PRIVATE ../../lib) add_dependencies(rpc_obj proto) add_library(rpc $) +target_include_directories(rpc PRIVATE ../../lib) diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/sasl_protocol.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/sasl_protocol.cc index 6fc04f754f6cb..bc9adbff313d7 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/sasl_protocol.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/sasl_protocol.cc @@ -20,6 +20,7 @@ #include "rpc_connection.h" #include "common/logging.h" #include "common/optional_wrapper.h" +#include "x-platform/syscall.h" #include "sasl_engine.h" #include "sasl_protocol.h" @@ -97,20 +98,17 @@ void SaslProtocol::Authenticate(std::function +#include #include #include @@ -48,3 +49,8 @@ void XPlatform::Syscall::ClearBufferSafely(void* buffer, explicit_bzero(buffer, sz_bytes); } } + +bool XPlatform::Syscall::StringCompareIgnoreCase(const std::string& a, + const std::string& b) { + return strcasecmp(a.c_str(), b.c_str()) == 0; +} diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/x-platform/syscall_windows.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/x-platform/syscall_windows.cc index 5a3423a99f196..2cd9e9d5157df 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/x-platform/syscall_windows.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/x-platform/syscall_windows.cc @@ -20,6 +20,8 @@ #include #include +#include + #include "syscall.h" #pragma comment(lib, "Shlwapi.lib") @@ -57,3 +59,8 @@ void XPlatform::Syscall::ClearBufferSafely(void* buffer, SecureZeroMemory(buffer, sz_bytes); } } + +bool XPlatform::Syscall::StringCompareIgnoreCase(const std::string& a, + const std::string& b) { + return _stricmp(a.c_str(), b.c_str()) == 0; +} diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/x-platform/syscall_common_test.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/x-platform/syscall_common_test.cc index d68b2afef9eea..7fa3971cf7edd 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/x-platform/syscall_common_test.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/x-platform/syscall_common_test.cc @@ -67,4 +67,21 @@ TEST(XPlatformSyscall, ClearBufferSafelyNumbers) { for (const auto number : numbers) { EXPECT_EQ(number, 0); } -} \ No newline at end of file +} + +TEST(XPlatformSyscall, StringCompareIgnoreCaseBasic) { + EXPECT_TRUE(XPlatform::Syscall::StringCompareIgnoreCase("aBcDeF", "AbCdEf")); + EXPECT_TRUE(XPlatform::Syscall::StringCompareIgnoreCase("a1B2c3D4e5F", + "A1b2C3d4E5f")); + EXPECT_TRUE(XPlatform::Syscall::StringCompareIgnoreCase( + "a!1@B#2$c%3^D&4*e(5)F", "A!1@b#2$C%3^d&4*E(5)f")); + EXPECT_TRUE(XPlatform::Syscall::StringCompareIgnoreCase( + "a1@B#2$c%3^D&4*e(5)F?:", "A1@b#2$C%3^d&4*E(5)f?:")); + EXPECT_TRUE(XPlatform::Syscall::StringCompareIgnoreCase("12345", "12345")); + EXPECT_TRUE(XPlatform::Syscall::StringCompareIgnoreCase("", "")); +} + +TEST(XPlatformSyscall, StringCompareIgnoreCaseNegative) { + EXPECT_FALSE(XPlatform::Syscall::StringCompareIgnoreCase("abcd", "abcde")); + EXPECT_FALSE(XPlatform::Syscall::StringCompareIgnoreCase("12345", "abcde")); +}