From 1a0de90068eb87e6d330b5c207f178d45f7f8b36 Mon Sep 17 00:00:00 2001 From: Dundar Goc Date: Fri, 20 May 2022 11:54:39 +0200 Subject: refactor: move reverse_text to strings.c as it's a string operation Also add tests for reverse_text. Co-authored-by: Kalle Ranki --- src/nvim/strings.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/nvim/strings.c') diff --git a/src/nvim/strings.c b/src/nvim/strings.c index cde2059a9d..ab5beb17bc 100644 --- a/src/nvim/strings.c +++ b/src/nvim/strings.c @@ -1507,3 +1507,24 @@ int kv_do_printf(StringBuilder *str, const char *fmt, ...) str->size += (size_t)printed; return printed; } + +/// Reverse text into allocated memory. +/// +/// @return the allocated string. +char_u *reverse_text(char_u *s) + FUNC_ATTR_NONNULL_RET +{ + // Reverse the pattern. + size_t len = STRLEN(s); + char_u *rev = xmalloc(len + 1); + size_t rev_i = len; + for (size_t s_i = 0; s_i < len; s_i++) { + const int mb_len = utfc_ptr2len((char *)s + s_i); + rev_i -= (size_t)mb_len; + memmove(rev + rev_i, s + s_i, (size_t)mb_len); + s_i += (size_t)mb_len - 1; + } + rev[len] = NUL; + + return rev; +} -- cgit