From 35027fa4c9c10cbc89d09d51f57b00ee6d56c816 Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Sun, 23 Aug 2020 23:06:38 +0900 Subject: [PATCH 1/5] introduce rcutils_strcasecmp, case insensitive string compare. Signed-off-by: Tomoya.Fujita --- CMakeLists.txt | 8 +++++ include/rcutils/strcasecmp.h | 49 ++++++++++++++++++++++++++++++ src/strcasecmp.c | 34 +++++++++++++++++++++ test/test_strcasecmp.cpp | 58 ++++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 include/rcutils/strcasecmp.h create mode 100644 src/strcasecmp.c create mode 100644 test/test_strcasecmp.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 65fbc686..b07e5a0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,7 @@ set(rcutils_sources src/repl_str.c src/shared_library.c src/snprintf.c + src/strcasecmp.c src/split.c src/strdup.c src/strerror.c @@ -401,6 +402,13 @@ if(BUILD_TESTING) target_link_libraries(test_snprintf ${PROJECT_NAME}) endif() + rcutils_custom_add_gtest(test_strcasecmp + test/test_strcasecmp.cpp + ) + if(TARGET test_strcasecmp) + target_link_libraries(test_strcasecmp ${PROJECT_NAME}) + endif() + rcutils_custom_add_gtest(test_uint8_array test/test_uint8_array.cpp ) diff --git a/include/rcutils/strcasecmp.h b/include/rcutils/strcasecmp.h new file mode 100644 index 00000000..ce6de8df --- /dev/null +++ b/include/rcutils/strcasecmp.h @@ -0,0 +1,49 @@ +// Copyright 2020 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef RCUTILS__STRCASECMP_H_ +#define RCUTILS__STRCASECMP_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include + +#include "rcutils/macros.h" +#include "rcutils/visibility_control.h" + +/// Case insensitive string compare. +/** + * This function compares two strings ignoring case which just wraps strcasecmp() + * or stricmp() in a portable way. This performs a byte-by-byte comparison of the + * strings s1 and s2, ignoring the case of the characters. + * + * \param[in] s1 String with null terminated to compare. + * \param[in] s2 String with null terminated to compare. + * \return An integer less than, equal to, or greater than zero if s1 is, after + * ignoring case, found to be less than, to match, or be greater than s2, + * respectively. + */ +RCUTILS_PUBLIC +RCUTILS_WARN_UNUSED +int +rcutils_strcasecmp(const char * s1, const char * s2); + +#ifdef __cplusplus +} +#endif + +#endif // RCUTILS__STRCASECMP_H_ diff --git a/src/strcasecmp.c b/src/strcasecmp.c new file mode 100644 index 00000000..4a34c8e9 --- /dev/null +++ b/src/strcasecmp.c @@ -0,0 +1,34 @@ +// Copyright 2020 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rcutils/strcasecmp.h" + +int +rcutils_strcasecmp(const char * s1, const char * s2) +{ +#ifndef _WIN32 + return strcasecmp(s1, s2); +#else + return stricmp(s1, s2); +#endif +} + +#ifdef __cplusplus +} +#endif diff --git a/test/test_strcasecmp.cpp b/test/test_strcasecmp.cpp new file mode 100644 index 00000000..d599b962 --- /dev/null +++ b/test/test_strcasecmp.cpp @@ -0,0 +1,58 @@ +// Copyright 2020 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "rcutils/strcasecmp.h" + +// Tests the rcutils_strcasecmp() function. +TEST(TestStrcasecmp, test_strcasecmp) { + EXPECT_EQ(0, rcutils_strcasecmp("", "")); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abc")); + EXPECT_EQ(0, rcutils_strcasecmp("ABC", "ABC")); + EXPECT_EQ(0, rcutils_strcasecmp("1abc", "1abc")); + EXPECT_EQ(0, rcutils_strcasecmp("abc1", "abc1")); + EXPECT_EQ(0, rcutils_strcasecmp("1ABC", "1ABC")); + EXPECT_EQ(0, rcutils_strcasecmp("ABC1", "ABC1")); + EXPECT_EQ(0, rcutils_strcasecmp("ABC", "abc")); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "ABC")); + EXPECT_EQ(0, rcutils_strcasecmp("Abc", "abc")); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "Abc")); + EXPECT_EQ(0, rcutils_strcasecmp("Abc", "Abc")); + EXPECT_EQ(0, rcutils_strcasecmp("aBc", "abc")); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "aBc")); + EXPECT_EQ(0, rcutils_strcasecmp("aBc", "aBc")); + EXPECT_EQ(0, rcutils_strcasecmp("abC", "abc")); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abC")); + EXPECT_EQ(0, rcutils_strcasecmp("abC", "abC")); + + EXPECT_NE(0, rcutils_strcasecmp("", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "")); + EXPECT_NE(0, rcutils_strcasecmp("abcd", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "abcd")); + EXPECT_NE(0, rcutils_strcasecmp("abcD", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "abcD")); + EXPECT_NE(0, rcutils_strcasecmp("1abc", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "1abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc1", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "abc1")); + EXPECT_NE(0, rcutils_strcasecmp("ABCd", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "ABCd")); + EXPECT_NE(0, rcutils_strcasecmp("1Abc", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "1Abc")); + EXPECT_NE(0, rcutils_strcasecmp("a1Bc", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "a1Bc")); + EXPECT_NE(0, rcutils_strcasecmp("ab1C", "abc")); + EXPECT_NE(0, rcutils_strcasecmp("abc", "ab1C")); +} From 3a2e1d4d09800e59a8ef84503d62f261e6ce23ed Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Fri, 28 Aug 2020 18:01:37 +0900 Subject: [PATCH 2/5] add rcutils_strncasecmp with test. Signed-off-by: Tomoya.Fujita --- CMakeLists.txt | 2 +- include/rcutils/strcasecmp.h | 21 +++++++++++++-- src/strcasecmp.c | 25 +++++++++++++++++ test/test_strcasecmp.cpp | 52 ++++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b07e5a0a..b96bfd0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,8 +64,8 @@ set(rcutils_sources src/repl_str.c src/shared_library.c src/snprintf.c - src/strcasecmp.c src/split.c + src/strcasecmp.c src/strdup.c src/strerror.c src/string_array.c diff --git a/include/rcutils/strcasecmp.h b/include/rcutils/strcasecmp.h index ce6de8df..4faa660d 100644 --- a/include/rcutils/strcasecmp.h +++ b/include/rcutils/strcasecmp.h @@ -20,8 +20,6 @@ extern "C" { #endif -#include - #include "rcutils/macros.h" #include "rcutils/visibility_control.h" @@ -42,6 +40,25 @@ RCUTILS_WARN_UNUSED int rcutils_strcasecmp(const char * s1, const char * s2); +/// Case insensitive string compare up to count characters. +/** + * This function compares two strings ignoring case which just wraps strncasecmp() + * or strnicmp() in a portable way. This performs a byte-by-byte comparison of the + * strings s1 and s2 up to count characters of s1 and s2, ignoring the case of the + * characters. + * + * \param[in] s1 String with null terminated to compare. + * \param[in] s2 String with null terminated to compare. + * \param[in] n Count characters to compare. + * \return An integer less than, equal to, or greater than zero if s1 is, after + * ignoring case, found to be less than, to match, or be greater than s2, + * respectively. + */ +RCUTILS_PUBLIC +RCUTILS_WARN_UNUSED +int +rcutils_strncasecmp(const char * s1, const char * s2, size_t n); + #ifdef __cplusplus } #endif diff --git a/src/strcasecmp.c b/src/strcasecmp.c index 4a34c8e9..dd6d022d 100644 --- a/src/strcasecmp.c +++ b/src/strcasecmp.c @@ -17,11 +17,20 @@ extern "C" { #endif +#include +#include + #include "rcutils/strcasecmp.h" int rcutils_strcasecmp(const char * s1, const char * s2) { + RCUTILS_CAN_FAIL_WITH({errno = EINVAL; return -1;}); + + if (s1 == NULL || s2 == NULL) { + errno = EINVAL; + return -1; + } #ifndef _WIN32 return strcasecmp(s1, s2); #else @@ -29,6 +38,22 @@ rcutils_strcasecmp(const char * s1, const char * s2) #endif } +int +rcutils_strncasecmp(const char * s1, const char * s2, size_t n) +{ + RCUTILS_CAN_FAIL_WITH({errno = EINVAL; return -1;}); + + if (s1 == NULL || s2 == NULL) { + errno = EINVAL; + return -1; + } +#ifndef _WIN32 + return strncasecmp(s1, s2, n); +#else + return strnicmp(s1, s2, n); +#endif +} + #ifdef __cplusplus } #endif diff --git a/test/test_strcasecmp.cpp b/test/test_strcasecmp.cpp index d599b962..db56a276 100644 --- a/test/test_strcasecmp.cpp +++ b/test/test_strcasecmp.cpp @@ -18,6 +18,10 @@ // Tests the rcutils_strcasecmp() function. TEST(TestStrcasecmp, test_strcasecmp) { + EXPECT_EQ(-1, rcutils_strcasecmp(NULL, NULL)); + EXPECT_EQ(-1, rcutils_strcasecmp(NULL, "")); + EXPECT_EQ(-1, rcutils_strcasecmp("", NULL)); + EXPECT_EQ(0, rcutils_strcasecmp("", "")); EXPECT_EQ(0, rcutils_strcasecmp("abc", "abc")); EXPECT_EQ(0, rcutils_strcasecmp("ABC", "ABC")); @@ -56,3 +60,51 @@ TEST(TestStrcasecmp, test_strcasecmp) { EXPECT_NE(0, rcutils_strcasecmp("ab1C", "abc")); EXPECT_NE(0, rcutils_strcasecmp("abc", "ab1C")); } + +// Tests the rcutils_strncasecmp() function. +TEST(TestStrcasecmp, test_strncasecmp) { + EXPECT_EQ(-1, rcutils_strncasecmp(NULL, NULL, 0)); + EXPECT_EQ(-1, rcutils_strncasecmp(NULL, "", 1)); + EXPECT_EQ(-1, rcutils_strncasecmp("", NULL, 1)); + + EXPECT_EQ(0, rcutils_strncasecmp("", "", 0)); + EXPECT_EQ(0, rcutils_strncasecmp("", "", 1)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "", 0)); + EXPECT_EQ(0, rcutils_strncasecmp("", "abc", 0)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abc", 3)); + EXPECT_EQ(0, rcutils_strncasecmp("ABC", "ABC", 3)); + EXPECT_EQ(0, rcutils_strncasecmp("1abc", "1abc", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("abc1", "abc1", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("1ABC", "1ABC", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("ABC1", "ABC1", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("ABC", "abc", 1)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "ABC", 1)); + EXPECT_EQ(0, rcutils_strncasecmp("Abc", "abc", 2)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "Abc", 2)); + EXPECT_EQ(0, rcutils_strncasecmp("Abc", "Abc", 2)); + EXPECT_EQ(0, rcutils_strncasecmp("aBc", "abc", 3)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "aBc", 3)); + EXPECT_EQ(0, rcutils_strncasecmp("aBc", "aBc", 3)); + EXPECT_EQ(0, rcutils_strncasecmp("abC", "abc", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abC", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("abC", "abC", 4)); + + EXPECT_NE(0, rcutils_strncasecmp("", "abc", 1)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "", 1)); + EXPECT_NE(0, rcutils_strncasecmp("abcd", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "abcd", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abcD", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "abcD", 4)); + EXPECT_NE(0, rcutils_strncasecmp("1abc", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "1abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc1", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "abc1", 4)); + EXPECT_NE(0, rcutils_strncasecmp("ABCd", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "ABCd", 4)); + EXPECT_NE(0, rcutils_strncasecmp("1Abc", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "1Abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("a1Bc", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "a1Bc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("ab1C", "abc", 4)); + EXPECT_NE(0, rcutils_strncasecmp("abc", "ab1C", 4)); +} From f07f00e57e8a89a8e23c3ba29c9867a2233c9f2f Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Wed, 2 Sep 2020 13:06:04 +0900 Subject: [PATCH 3/5] add comparison result value, update test to check if less or greater than zero. Signed-off-by: Tomoya.Fujita --- include/rcutils/strcasecmp.h | 42 +++--- src/strcasecmp.c | 39 ++++-- test/test_strcasecmp.cpp | 247 +++++++++++++++++++++++------------ 3 files changed, 217 insertions(+), 111 deletions(-) diff --git a/include/rcutils/strcasecmp.h b/include/rcutils/strcasecmp.h index 4faa660d..c6a2db4f 100644 --- a/include/rcutils/strcasecmp.h +++ b/include/rcutils/strcasecmp.h @@ -25,39 +25,49 @@ extern "C" /// Case insensitive string compare. /** - * This function compares two strings ignoring case which just wraps strcasecmp() - * or stricmp() in a portable way. This performs a byte-by-byte comparison of the - * strings s1 and s2, ignoring the case of the characters. + * This function compares two strings ignoring case in a portable way. + * This performs a byte-by-byte comparison of the strings s1 and s2, + * ignoring the case of the characters. * - * \param[in] s1 String with null terminated to compare. - * \param[in] s2 String with null terminated to compare. - * \return An integer less than, equal to, or greater than zero if s1 is, after + * \param[in] s1 Null terminated string to compare. + * \param[in] s2 Null terminated string to compare. + * \param[out] value Pointer to camparison result. + * An integer less than, equal to, or greater than zero if s1 is, after * ignoring case, found to be less than, to match, or be greater than s2, * respectively. + * \return 0 if s1 and s2 match, -1 if don't. */ RCUTILS_PUBLIC RCUTILS_WARN_UNUSED int -rcutils_strcasecmp(const char * s1, const char * s2); +rcutils_strcasecmp( + const char * s1, + const char * s2, + int * value); /// Case insensitive string compare up to count characters. /** - * This function compares two strings ignoring case which just wraps strncasecmp() - * or strnicmp() in a portable way. This performs a byte-by-byte comparison of the - * strings s1 and s2 up to count characters of s1 and s2, ignoring the case of the - * characters. + * This function compares two strings ignoring case in a portable way. + * This performs a byte-by-byte comparison of the strings s1 and s2 up to count + * characters of s1 and s2, ignoring the case of the characters. * - * \param[in] s1 String with null terminated to compare. - * \param[in] s2 String with null terminated to compare. - * \param[in] n Count characters to compare. - * \return An integer less than, equal to, or greater than zero if s1 is, after + * \param[in] s1 First string to compare. + * \param[in] s2 Second string to compare. + * \param[in] n Count of characters to compare. + * \param[out] value Pointer to camparison result. + * An integer less than, equal to, or greater than zero if s1 is, after * ignoring case, found to be less than, to match, or be greater than s2, * respectively. + * \return 0 if s1 and s2 match, -1 if don't. */ RCUTILS_PUBLIC RCUTILS_WARN_UNUSED int -rcutils_strncasecmp(const char * s1, const char * s2, size_t n); +rcutils_strncasecmp( + const char * s1, + const char * s2, + size_t n, + int * value); #ifdef __cplusplus } diff --git a/src/strcasecmp.c b/src/strcasecmp.c index dd6d022d..e8bb16ea 100644 --- a/src/strcasecmp.c +++ b/src/strcasecmp.c @@ -23,35 +23,46 @@ extern "C" #include "rcutils/strcasecmp.h" int -rcutils_strcasecmp(const char * s1, const char * s2) +rcutils_strcasecmp( + const char * s1, + const char * s2, + int * value) { - RCUTILS_CAN_FAIL_WITH({errno = EINVAL; return -1;}); - - if (s1 == NULL || s2 == NULL) { - errno = EINVAL; + if (s1 == NULL || s2 == NULL || value == NULL) { return -1; } #ifndef _WIN32 - return strcasecmp(s1, s2); + *value = strcasecmp(s1, s2); #else - return stricmp(s1, s2); + *value = stricmp(s1, s2); #endif + if (*value == 0) { + return 0; + } else { + return -1; + } } int -rcutils_strncasecmp(const char * s1, const char * s2, size_t n) +rcutils_strncasecmp( + const char * s1, + const char * s2, + size_t n, + int * value) { - RCUTILS_CAN_FAIL_WITH({errno = EINVAL; return -1;}); - - if (s1 == NULL || s2 == NULL) { - errno = EINVAL; + if (s1 == NULL || s2 == NULL || value == NULL) { return -1; } #ifndef _WIN32 - return strncasecmp(s1, s2, n); + *value = strncasecmp(s1, s2, n); #else - return strnicmp(s1, s2, n); + *value = strnicmp(s1, s2, n); #endif + if (*value == 0) { + return 0; + } else { + return -1; + } } #ifdef __cplusplus diff --git a/test/test_strcasecmp.cpp b/test/test_strcasecmp.cpp index db56a276..7deb4a65 100644 --- a/test/test_strcasecmp.cpp +++ b/test/test_strcasecmp.cpp @@ -18,93 +18,178 @@ // Tests the rcutils_strcasecmp() function. TEST(TestStrcasecmp, test_strcasecmp) { - EXPECT_EQ(-1, rcutils_strcasecmp(NULL, NULL)); - EXPECT_EQ(-1, rcutils_strcasecmp(NULL, "")); - EXPECT_EQ(-1, rcutils_strcasecmp("", NULL)); + int value; + EXPECT_EQ(-1, rcutils_strcasecmp(NULL, NULL, NULL)); + EXPECT_EQ(-1, rcutils_strcasecmp(NULL, "", &value)); + EXPECT_EQ(-1, rcutils_strcasecmp("", NULL, &value)); + EXPECT_EQ(-1, rcutils_strcasecmp("", "", NULL)); + EXPECT_EQ(-1, rcutils_strcasecmp(NULL, NULL, &value)); + EXPECT_EQ(-1, rcutils_strcasecmp("", NULL, NULL)); + EXPECT_EQ(-1, rcutils_strcasecmp(NULL, "", NULL)); - EXPECT_EQ(0, rcutils_strcasecmp("", "")); - EXPECT_EQ(0, rcutils_strcasecmp("abc", "abc")); - EXPECT_EQ(0, rcutils_strcasecmp("ABC", "ABC")); - EXPECT_EQ(0, rcutils_strcasecmp("1abc", "1abc")); - EXPECT_EQ(0, rcutils_strcasecmp("abc1", "abc1")); - EXPECT_EQ(0, rcutils_strcasecmp("1ABC", "1ABC")); - EXPECT_EQ(0, rcutils_strcasecmp("ABC1", "ABC1")); - EXPECT_EQ(0, rcutils_strcasecmp("ABC", "abc")); - EXPECT_EQ(0, rcutils_strcasecmp("abc", "ABC")); - EXPECT_EQ(0, rcutils_strcasecmp("Abc", "abc")); - EXPECT_EQ(0, rcutils_strcasecmp("abc", "Abc")); - EXPECT_EQ(0, rcutils_strcasecmp("Abc", "Abc")); - EXPECT_EQ(0, rcutils_strcasecmp("aBc", "abc")); - EXPECT_EQ(0, rcutils_strcasecmp("abc", "aBc")); - EXPECT_EQ(0, rcutils_strcasecmp("aBc", "aBc")); - EXPECT_EQ(0, rcutils_strcasecmp("abC", "abc")); - EXPECT_EQ(0, rcutils_strcasecmp("abc", "abC")); - EXPECT_EQ(0, rcutils_strcasecmp("abC", "abC")); + EXPECT_EQ(0, rcutils_strcasecmp("", "", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("ABC", "ABC", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("1abc", "1abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abc1", "abc1", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("1ABC", "1ABC", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("ABC1", "ABC1", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("ABC", "abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "ABC", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("Abc", "abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "Abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("Abc", "Abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("aBc", "abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "aBc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("aBc", "aBc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abC", "abc", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abC", &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strcasecmp("abC", "abC", &value)); + EXPECT_EQ(0, value); - EXPECT_NE(0, rcutils_strcasecmp("", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "")); - EXPECT_NE(0, rcutils_strcasecmp("abcd", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "abcd")); - EXPECT_NE(0, rcutils_strcasecmp("abcD", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "abcD")); - EXPECT_NE(0, rcutils_strcasecmp("1abc", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "1abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc1", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "abc1")); - EXPECT_NE(0, rcutils_strcasecmp("ABCd", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "ABCd")); - EXPECT_NE(0, rcutils_strcasecmp("1Abc", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "1Abc")); - EXPECT_NE(0, rcutils_strcasecmp("a1Bc", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "a1Bc")); - EXPECT_NE(0, rcutils_strcasecmp("ab1C", "abc")); - EXPECT_NE(0, rcutils_strcasecmp("abc", "ab1C")); + EXPECT_EQ(-1, rcutils_strcasecmp("", "abc", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abcd", "abc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "abcd", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abcD", "abc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "abcD", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("1abc", "abc", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "1abc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc1", "abc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "abc1", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("ABCd", "abc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "ABCd", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("1Abc", "abc", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "1Abc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("a1Bc", "abc", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "a1Bc", &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("ab1C", "abc", &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strcasecmp("abc", "ab1C", &value)); + EXPECT_GT(value, 0); } // Tests the rcutils_strncasecmp() function. TEST(TestStrcasecmp, test_strncasecmp) { - EXPECT_EQ(-1, rcutils_strncasecmp(NULL, NULL, 0)); - EXPECT_EQ(-1, rcutils_strncasecmp(NULL, "", 1)); - EXPECT_EQ(-1, rcutils_strncasecmp("", NULL, 1)); + int value; + EXPECT_EQ(-1, rcutils_strncasecmp(NULL, NULL, 0, NULL)); + EXPECT_EQ(-1, rcutils_strncasecmp(NULL, "", 1, &value)); + EXPECT_EQ(-1, rcutils_strncasecmp("", NULL, 1, &value)); + EXPECT_EQ(-1, rcutils_strncasecmp("", "", 1, NULL)); + EXPECT_EQ(-1, rcutils_strncasecmp(NULL, NULL, 0, &value)); + EXPECT_EQ(-1, rcutils_strncasecmp("", NULL, 0, NULL)); + EXPECT_EQ(-1, rcutils_strncasecmp(NULL, "", 0, NULL)); - EXPECT_EQ(0, rcutils_strncasecmp("", "", 0)); - EXPECT_EQ(0, rcutils_strncasecmp("", "", 1)); - EXPECT_EQ(0, rcutils_strncasecmp("abc", "", 0)); - EXPECT_EQ(0, rcutils_strncasecmp("", "abc", 0)); - EXPECT_EQ(0, rcutils_strncasecmp("abc", "abc", 3)); - EXPECT_EQ(0, rcutils_strncasecmp("ABC", "ABC", 3)); - EXPECT_EQ(0, rcutils_strncasecmp("1abc", "1abc", 4)); - EXPECT_EQ(0, rcutils_strncasecmp("abc1", "abc1", 4)); - EXPECT_EQ(0, rcutils_strncasecmp("1ABC", "1ABC", 4)); - EXPECT_EQ(0, rcutils_strncasecmp("ABC1", "ABC1", 4)); - EXPECT_EQ(0, rcutils_strncasecmp("ABC", "abc", 1)); - EXPECT_EQ(0, rcutils_strncasecmp("abc", "ABC", 1)); - EXPECT_EQ(0, rcutils_strncasecmp("Abc", "abc", 2)); - EXPECT_EQ(0, rcutils_strncasecmp("abc", "Abc", 2)); - EXPECT_EQ(0, rcutils_strncasecmp("Abc", "Abc", 2)); - EXPECT_EQ(0, rcutils_strncasecmp("aBc", "abc", 3)); - EXPECT_EQ(0, rcutils_strncasecmp("abc", "aBc", 3)); - EXPECT_EQ(0, rcutils_strncasecmp("aBc", "aBc", 3)); - EXPECT_EQ(0, rcutils_strncasecmp("abC", "abc", 4)); - EXPECT_EQ(0, rcutils_strncasecmp("abc", "abC", 4)); - EXPECT_EQ(0, rcutils_strncasecmp("abC", "abC", 4)); + EXPECT_EQ(0, rcutils_strncasecmp("", "", 0, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("", "", 1, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "", 0, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("", "abc", 0, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abc", 3, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("ABC", "ABC", 3, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("1abc", "1abc", 4, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc1", "abc1", 4, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("1ABC", "1ABC", 4, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("ABC1", "ABC1", 4, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("ABC", "abc", 1, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "ABC", 1, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("Abc", "abc", 2, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "Abc", 2, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("Abc", "Abc", 2, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("aBc", "abc", 3, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "aBc", 3, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("aBc", "aBc", 3, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abC", "abc", 4, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abC", 4, &value)); + EXPECT_EQ(0, value); + EXPECT_EQ(0, rcutils_strncasecmp("abC", "abC", 4, &value)); + EXPECT_EQ(0, value); - EXPECT_NE(0, rcutils_strncasecmp("", "abc", 1)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "", 1)); - EXPECT_NE(0, rcutils_strncasecmp("abcd", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "abcd", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abcD", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "abcD", 4)); - EXPECT_NE(0, rcutils_strncasecmp("1abc", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "1abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc1", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "abc1", 4)); - EXPECT_NE(0, rcutils_strncasecmp("ABCd", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "ABCd", 4)); - EXPECT_NE(0, rcutils_strncasecmp("1Abc", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "1Abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("a1Bc", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "a1Bc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("ab1C", "abc", 4)); - EXPECT_NE(0, rcutils_strncasecmp("abc", "ab1C", 4)); + EXPECT_EQ(-1, rcutils_strncasecmp("", "abc", 1, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "", 1, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abcd", "abc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "abcd", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abcD", "abc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "abcD", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("1abc", "abc", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "1abc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc1", "abc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "abc1", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("ABCd", "abc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "ABCd", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("1Abc", "abc", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "1Abc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("a1Bc", "abc", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "a1Bc", 4, &value)); + EXPECT_GT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("ab1C", "abc", 4, &value)); + EXPECT_LT(value, 0); + EXPECT_EQ(-1, rcutils_strncasecmp("abc", "ab1C", 4, &value)); + EXPECT_GT(value, 0); } From 20b9c981b682c3afc4d1cd7d526fe12120c8e03c Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Thu, 3 Sep 2020 09:15:55 +0900 Subject: [PATCH 4/5] always return 0 if method is successfully called. Signed-off-by: Tomoya.Fujita --- include/rcutils/strcasecmp.h | 8 ++-- src/strcasecmp.c | 12 +----- test/test_strcasecmp.cpp | 72 ++++++++++++++++++------------------ 3 files changed, 42 insertions(+), 50 deletions(-) diff --git a/include/rcutils/strcasecmp.h b/include/rcutils/strcasecmp.h index c6a2db4f..bdb90649 100644 --- a/include/rcutils/strcasecmp.h +++ b/include/rcutils/strcasecmp.h @@ -31,11 +31,11 @@ extern "C" * * \param[in] s1 Null terminated string to compare. * \param[in] s2 Null terminated string to compare. - * \param[out] value Pointer to camparison result. + * \param[out] value Pointer to comparison result. * An integer less than, equal to, or greater than zero if s1 is, after * ignoring case, found to be less than, to match, or be greater than s2, * respectively. - * \return 0 if s1 and s2 match, -1 if don't. + * \return 0 if method succeeded , -1 if failed. */ RCUTILS_PUBLIC RCUTILS_WARN_UNUSED @@ -54,11 +54,11 @@ rcutils_strcasecmp( * \param[in] s1 First string to compare. * \param[in] s2 Second string to compare. * \param[in] n Count of characters to compare. - * \param[out] value Pointer to camparison result. + * \param[out] value Pointer to comparison result. * An integer less than, equal to, or greater than zero if s1 is, after * ignoring case, found to be less than, to match, or be greater than s2, * respectively. - * \return 0 if s1 and s2 match, -1 if don't. + * \return 0 if method succeeded , -1 if failed. */ RCUTILS_PUBLIC RCUTILS_WARN_UNUSED diff --git a/src/strcasecmp.c b/src/strcasecmp.c index e8bb16ea..be037aaa 100644 --- a/src/strcasecmp.c +++ b/src/strcasecmp.c @@ -36,11 +36,7 @@ rcutils_strcasecmp( #else *value = stricmp(s1, s2); #endif - if (*value == 0) { - return 0; - } else { - return -1; - } + return 0; } int @@ -58,11 +54,7 @@ rcutils_strncasecmp( #else *value = strnicmp(s1, s2, n); #endif - if (*value == 0) { - return 0; - } else { - return -1; - } + return 0; } #ifdef __cplusplus diff --git a/test/test_strcasecmp.cpp b/test/test_strcasecmp.cpp index 7deb4a65..8fc614dc 100644 --- a/test/test_strcasecmp.cpp +++ b/test/test_strcasecmp.cpp @@ -64,41 +64,41 @@ TEST(TestStrcasecmp, test_strcasecmp) { EXPECT_EQ(0, rcutils_strcasecmp("abC", "abC", &value)); EXPECT_EQ(0, value); - EXPECT_EQ(-1, rcutils_strcasecmp("", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("", "abc", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abcd", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abcd", "abc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "abcd", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abcd", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abcD", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abcD", "abc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "abcD", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abcD", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("1abc", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("1abc", "abc", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "1abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "1abc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc1", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc1", "abc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "abc1", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "abc1", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("ABCd", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("ABCd", "abc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "ABCd", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "ABCd", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("1Abc", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("1Abc", "abc", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "1Abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "1Abc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("a1Bc", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("a1Bc", "abc", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "a1Bc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "a1Bc", &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("ab1C", "abc", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("ab1C", "abc", &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strcasecmp("abc", "ab1C", &value)); + EXPECT_EQ(0, rcutils_strcasecmp("abc", "ab1C", &value)); EXPECT_GT(value, 0); } @@ -156,40 +156,40 @@ TEST(TestStrcasecmp, test_strncasecmp) { EXPECT_EQ(0, rcutils_strncasecmp("abC", "abC", 4, &value)); EXPECT_EQ(0, value); - EXPECT_EQ(-1, rcutils_strncasecmp("", "abc", 1, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("", "abc", 1, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "", 1, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "", 1, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abcd", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abcd", "abc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "abcd", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abcd", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abcD", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abcD", "abc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "abcD", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abcD", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("1abc", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("1abc", "abc", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "1abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "1abc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc1", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc1", "abc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "abc1", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "abc1", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("ABCd", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("ABCd", "abc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "ABCd", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "ABCd", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("1Abc", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("1Abc", "abc", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "1Abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "1Abc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("a1Bc", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("a1Bc", "abc", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "a1Bc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "a1Bc", 4, &value)); EXPECT_GT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("ab1C", "abc", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("ab1C", "abc", 4, &value)); EXPECT_LT(value, 0); - EXPECT_EQ(-1, rcutils_strncasecmp("abc", "ab1C", 4, &value)); + EXPECT_EQ(0, rcutils_strncasecmp("abc", "ab1C", 4, &value)); EXPECT_GT(value, 0); } From 9b586f246c59a111ac238ec664babec9506fb7ff Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Fri, 4 Sep 2020 09:38:34 +0900 Subject: [PATCH 5/5] windows unhappy, use ISO C and C++ conformant name instead. Signed-off-by: Tomoya.Fujita --- src/strcasecmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strcasecmp.c b/src/strcasecmp.c index be037aaa..941919a6 100644 --- a/src/strcasecmp.c +++ b/src/strcasecmp.c @@ -34,7 +34,7 @@ rcutils_strcasecmp( #ifndef _WIN32 *value = strcasecmp(s1, s2); #else - *value = stricmp(s1, s2); + *value = _stricmp(s1, s2); #endif return 0; } @@ -52,7 +52,7 @@ rcutils_strncasecmp( #ifndef _WIN32 *value = strncasecmp(s1, s2, n); #else - *value = strnicmp(s1, s2, n); + *value = _strnicmp(s1, s2, n); #endif return 0; }