From a99845006f96f9d1e7af871ec67c71cee8408a62 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Tue, 16 Jun 2015 16:58:23 +0200 Subject: utils: add get_last_x_chars() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Pavel Březina --- src/tests/cmocka/test_string_utils.c | 28 ++++++++++++++++++++++++++++ src/tests/cmocka/test_utils.c | 1 + src/tests/cmocka/test_utils.h | 1 + src/util/string_utils.c | 17 +++++++++++++++++ src/util/util.h | 2 ++ 5 files changed, 49 insertions(+) diff --git a/src/tests/cmocka/test_string_utils.c b/src/tests/cmocka/test_string_utils.c index 5d3fcf4fe..4832015a5 100644 --- a/src/tests/cmocka/test_string_utils.c +++ b/src/tests/cmocka/test_string_utils.c @@ -192,3 +192,31 @@ void test_guid_blob_to_string_buf(void **state) assert_string_equal(test_data[c].guid_str, str_buf); } } + +void test_get_last_x_chars(void **state) +{ + const char *s; + + s = get_last_x_chars(NULL, 0); + assert_null(s); + + s = get_last_x_chars("abc", 0); + assert_non_null(s); + assert_string_equal(s, ""); + + s = get_last_x_chars("abc", 1); + assert_non_null(s); + assert_string_equal(s, "c"); + + s = get_last_x_chars("abc", 2); + assert_non_null(s); + assert_string_equal(s, "bc"); + + s = get_last_x_chars("abc", 3); + assert_non_null(s); + assert_string_equal(s, "abc"); + + s = get_last_x_chars("abc", 4); + assert_non_null(s); + assert_string_equal(s, "abc"); +} diff --git a/src/tests/cmocka/test_utils.c b/src/tests/cmocka/test_utils.c index e7f97f763..d3d00feda 100644 --- a/src/tests/cmocka/test_utils.c +++ b/src/tests/cmocka/test_utils.c @@ -1267,6 +1267,7 @@ int main(int argc, const char *argv[]) cmocka_unit_test(test_replace_whitespaces), cmocka_unit_test(test_reverse_replace_whitespaces), cmocka_unit_test(test_guid_blob_to_string_buf), + cmocka_unit_test(test_get_last_x_chars), cmocka_unit_test_setup_teardown(test_add_strings_lists, setup_add_strings_lists, teardown_add_strings_lists), diff --git a/src/tests/cmocka/test_utils.h b/src/tests/cmocka/test_utils.h index 61ef7e43a..8b5163165 100644 --- a/src/tests/cmocka/test_utils.h +++ b/src/tests/cmocka/test_utils.h @@ -30,5 +30,6 @@ void test_textual_public_key(void **state); void test_replace_whitespaces(void **state); void test_reverse_replace_whitespaces(void **state); void test_guid_blob_to_string_buf(void **state); +void test_get_last_x_chars(void **state); #endif /* __TESTS__CMOCKA__TEST_UTILS_H__ */ diff --git a/src/util/string_utils.c b/src/util/string_utils.c index 71b2a0920..b6037621e 100644 --- a/src/util/string_utils.c +++ b/src/util/string_utils.c @@ -108,3 +108,20 @@ errno_t guid_blob_to_string_buf(const uint8_t *blob, char *str_buf, return EOK; } + +const char *get_last_x_chars(const char *str, size_t x) +{ + size_t len; + + if (str == NULL) { + return NULL; + } + + len = strlen(str); + + if (len < x) { + return str; + } + + return (str + len - x); +} diff --git a/src/util/util.h b/src/util/util.h index 786ed303e..3d90cf0d1 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -628,6 +628,8 @@ char * sss_reverse_replace_space(TALLOC_CTX *mem_ctx, errno_t guid_blob_to_string_buf(const uint8_t *blob, char *str_buf, size_t buf_size); +const char *get_last_x_chars(const char *str, size_t x); + /* from become_user.c */ errno_t become_user(uid_t uid, gid_t gid); struct sss_creds; -- cgit