]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1738: Duplicate code to reverse a string v9.0.1738
authorzeertzjq <zeertzjq@outlook.com>
Sat, 19 Aug 2023 09:35:03 +0000 (11:35 +0200)
committerChristian Brabandt <cb@256bit.org>
Sat, 19 Aug 2023 09:35:03 +0000 (11:35 +0200)
Problem:  Duplicate code to reverse a string
Solution: Move reverse_text() to strings.c and remove string_reverse().

closes: #12847

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
src/list.c
src/proto/search.pro
src/proto/strings.pro
src/search.c
src/strings.c
src/version.c

index 28799d5fd4752a842dad7c45f4feae65e2854ed3..6210fd63806da17cf3ba697952e744c8ab49475a 100644 (file)
@@ -3001,7 +3001,13 @@ f_reverse(typval_T *argvars, typval_T *rettv)
     if (argvars[0].v_type == VAR_BLOB)
        blob_reverse(argvars[0].vval.v_blob, rettv);
     else if (argvars[0].v_type == VAR_STRING)
-       string_reverse(argvars[0].vval.v_string, rettv);
+    {
+       rettv->v_type = VAR_STRING;
+       if (argvars[0].vval.v_string != NULL)
+           rettv->vval.v_string = reverse_text(argvars[0].vval.v_string);
+       else
+           rettv->vval.v_string = NULL;
+    }
     else if (argvars[0].v_type == VAR_LIST)
        list_reverse(argvars[0].vval.v_list, rettv);
 }
index 7a29ff3a03cec1c353fc94f025cf2ec70dee6685..99e279dadf7b051f571432b59ab9385acd3d0cde 100644 (file)
@@ -1,7 +1,6 @@
 /* search.c */
 int search_regcomp(char_u *pat, char_u **used_pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch);
 char_u *get_search_pat(void);
-char_u *reverse_text(char_u *s);
 void save_re_pat(int idx, char_u *pat, int magic);
 void save_search_patterns(void);
 void restore_search_patterns(void);
index 8924a25715ebe6caf0589e76330d7d1f37e263d0..aa8b374c3454019440b251365f3ab6b0cebbedb3 100644 (file)
@@ -21,9 +21,9 @@ char_u *vim_strrchr(char_u *string, int c);
 void sort_strings(char_u **files, int count);
 int has_non_ascii(char_u *s);
 char_u *concat_str(char_u *str1, char_u *str2);
+char_u *reverse_text(char_u *s);
 char_u *string_quote(char_u *str, int function);
 long string_count(char_u *haystack, char_u *needle, int ic);
-void string_reverse(char_u *str, typval_T *rettv);
 void string_filter_map(char_u *str, filtermap_T filtermap, typval_T *expr, typval_T *rettv);
 void string_reduce(typval_T *argvars, typval_T *expr, typval_T *rettv);
 void f_byteidx(typval_T *argvars, typval_T *rettv);
index de17595257aecd6d9729fcc8db34d58a9e18725a..d4baa9192ccbeed8d402cb5d6ff8cfb37294d1e2 100644 (file)
@@ -203,47 +203,6 @@ get_search_pat(void)
     return mr_pattern;
 }
 
-#if defined(FEAT_RIGHTLEFT) || defined(PROTO)
-/*
- * Reverse text into allocated memory.
- * Returns the allocated string, NULL when out of memory.
- */
-    char_u *
-reverse_text(char_u *s)
-{
-    unsigned   len;
-    unsigned   s_i, rev_i;
-    char_u     *rev;
-
-    /*
-     * Reverse the pattern.
-     */
-    len = (unsigned)STRLEN(s);
-    rev = alloc(len + 1);
-    if (rev == NULL)
-       return NULL;
-
-    rev_i = len;
-    for (s_i = 0; s_i < len; ++s_i)
-    {
-       if (has_mbyte)
-       {
-           int mb_len;
-
-           mb_len = (*mb_ptr2len)(s + s_i);
-           rev_i -= mb_len;
-           mch_memmove(rev + rev_i, s + s_i, mb_len);
-           s_i += mb_len - 1;
-       }
-       else
-           rev[--rev_i] = s[s_i];
-
-    }
-    rev[len] = NUL;
-    return rev;
-}
-#endif
-
     void
 save_re_pat(int idx, char_u *pat, int magic)
 {
index 25c32ecaf1954f66a1eaed6c8c490db9e24605b6..993674406cc3daae0740975798fc842aca8f703e 100644 (file)
@@ -770,6 +770,36 @@ concat_str(char_u *str1, char_u *str2)
     return dest;
 }
 
+#if defined(FEAT_EVAL) || defined(FEAT_RIGHTLEFT) || defined(PROTO)
+/*
+ * Reverse text into allocated memory.
+ * Returns the allocated string, NULL when out of memory.
+ */
+    char_u *
+reverse_text(char_u *s)
+{
+    size_t len = STRLEN(s);
+    char_u *rev = alloc(len + 1);
+    if (rev == NULL)
+       return NULL;
+
+    for (size_t s_i = 0, rev_i = len; s_i < len; ++s_i)
+    {
+       if (has_mbyte)
+       {
+           int mb_len = (*mb_ptr2len)(s + s_i);
+           rev_i -= mb_len;
+           mch_memmove(rev + rev_i, s + s_i, mb_len);
+           s_i += mb_len - 1;
+       }
+       else
+           rev[--rev_i] = s[s_i];
+    }
+    rev[len] = NUL;
+    return rev;
+}
+#endif
+
 #if defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Return string "str" in ' quotes, doubling ' characters.
@@ -854,47 +884,6 @@ string_count(char_u *haystack, char_u *needle, int ic)
     return n;
 }
 
-/*
- * Reverse the string in 'str' and set the result in 'rettv'.
- */
-    void
-string_reverse(char_u *str, typval_T *rettv)
-{
-    rettv->v_type = VAR_STRING;
-    rettv->vval.v_string = NULL;
-    if (str == NULL)
-       return;
-
-    char_u     *rstr = vim_strsave(str);
-    rettv->vval.v_string = rstr;
-    if (rstr == NULL || *str == NUL)
-       return;
-
-    size_t     len = STRLEN(rstr);
-    if (has_mbyte)
-    {
-       char_u *src = str;
-       char_u *dest = rstr + len;
-
-       while (src < str + len)
-       {
-           int clen = mb_ptr2len(src);
-           dest -= clen;
-           mch_memmove(dest, src, (size_t)clen);
-           src += clen;
-       }
-    }
-    else
-    {
-       for (size_t i = 0; i < len / 2; i++)
-       {
-           char tmp = rstr[len - i - 1];
-           rstr[len - i - 1] = rstr[i];
-           rstr[i] = tmp;
-       }
-    }
-}
-
 /*
  * Make a typval_T of the first character of "input" and store it in "output".
  * Return OK or FAIL.
index 325a46efe63a8b2f023cde97ec995245315339aa..f6022d2cf8b7facc7a35a2d13e4a2d6ade3e53b8 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1738,
 /**/
     1737,
 /**/