aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/strings.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-05-20 17:00:51 +0200
committerGitHub <noreply@github.com>2022-05-20 17:00:51 +0200
commitffb55261a835e998abd49ff7efc4164f43b6bbe5 (patch)
tree22e4cc1b3c7636769980b70132acc6984bbee0eb /src/nvim/strings.c
parent76691bea04fcfb4e898e5822ae57c5b86ec06dbe (diff)
parent1a0de90068eb87e6d330b5c207f178d45f7f8b36 (diff)
downloadrneovim-ffb55261a835e998abd49ff7efc4164f43b6bbe5.tar.gz
rneovim-ffb55261a835e998abd49ff7efc4164f43b6bbe5.tar.bz2
rneovim-ffb55261a835e998abd49ff7efc4164f43b6bbe5.zip
Merge pull request #18653 from dundargoc/refactor/move-reverse-text
refactor: move reverse_text to strings.c as it's a string operation
Diffstat (limited to 'src/nvim/strings.c')
-rw-r--r--src/nvim/strings.c21
1 files changed, 21 insertions, 0 deletions
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;
+}