mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 21:48:35 +00:00
vim-patch:8.2.3139: functions for string manipulation are spread out (#23316)
Problem: Functions for string manipulation are spread out.
Solution: Move string related functions to a new source file. (Yegappan
Lakshmanan, closes vim/vim#8470)
a2438132a6
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
@@ -2361,6 +2361,34 @@ static char *iconv_string(const vimconv_T *const vcp, const char *str, size_t sl
|
||||
return result;
|
||||
}
|
||||
|
||||
/// iconv() function
|
||||
void f_iconv(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
{
|
||||
vimconv_T vimconv;
|
||||
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = NULL;
|
||||
|
||||
const char *const str = tv_get_string(&argvars[0]);
|
||||
char buf1[NUMBUFLEN];
|
||||
char *const from = enc_canonize(enc_skip((char *)tv_get_string_buf(&argvars[1], buf1)));
|
||||
char buf2[NUMBUFLEN];
|
||||
char *const to = enc_canonize(enc_skip((char *)tv_get_string_buf(&argvars[2], buf2)));
|
||||
vimconv.vc_type = CONV_NONE;
|
||||
convert_setup(&vimconv, from, to);
|
||||
|
||||
// If the encodings are equal, no conversion needed.
|
||||
if (vimconv.vc_type == CONV_NONE) {
|
||||
rettv->vval.v_string = xstrdup(str);
|
||||
} else {
|
||||
rettv->vval.v_string = string_convert(&vimconv, (char *)str, NULL);
|
||||
}
|
||||
|
||||
convert_setup(&vimconv, NULL, NULL);
|
||||
xfree(from);
|
||||
xfree(to);
|
||||
}
|
||||
|
||||
/// Setup "vcp" for conversion from "from" to "to".
|
||||
/// The names must have been made canonical with enc_canonize().
|
||||
/// vcp->vc_type must have been initialized to CONV_NONE.
|
||||
|
Reference in New Issue
Block a user