aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDundar Goc <gocdundar@gmail.com>2022-04-15 19:49:06 +0200
committerDundar Goc <gocdundar@gmail.com>2022-04-16 18:09:26 +0200
commit88270a57358e4009537de9435c19fcb17e66ffdd (patch)
tree87216094e11d56b9058ac23de43238ff3a469ff6
parent7a2fcbbbecc96c0179aa9449a1d4e3b5d936a054 (diff)
downloadrneovim-88270a57358e4009537de9435c19fcb17e66ffdd.tar.gz
rneovim-88270a57358e4009537de9435c19fcb17e66ffdd.tar.bz2
rneovim-88270a57358e4009537de9435c19fcb17e66ffdd.zip
refactor: add function xstrnsave
xstrnsave is a clone of vim_strnsave that uses char* instead of char_u*. Its purpose short-term is to help reduce the number of casts and for long-term to replace vim_strnsave as the need to use char_u is eliminated.
-rw-r--r--src/nvim/ex_eval.c4
-rw-r--r--src/nvim/if_cscope.c2
-rw-r--r--src/nvim/menu.c6
-rw-r--r--src/nvim/strings.c7
4 files changed, 13 insertions, 6 deletions
diff --git a/src/nvim/ex_eval.c b/src/nvim/ex_eval.c
index f4aaab5c43..a32f7db5f2 100644
--- a/src/nvim/ex_eval.c
+++ b/src/nvim/ex_eval.c
@@ -388,12 +388,12 @@ char *get_exception_string(void *value, except_type_T type, char_u *cmdname, int
mesg = ((struct msglist *)value)->throw_msg;
if (cmdname != NULL && *cmdname != NUL) {
size_t cmdlen = STRLEN(cmdname);
- ret = (char *)vim_strnsave((char_u *)"Vim(", 4 + cmdlen + 2 + STRLEN(mesg));
+ ret = xstrnsave("Vim(", 4 + cmdlen + 2 + STRLEN(mesg));
STRCPY(&ret[4], cmdname);
STRCPY(&ret[4 + cmdlen], "):");
val = ret + 4 + cmdlen + 2;
} else {
- ret = (char *)vim_strnsave((char_u *)"Vim:", 4 + STRLEN(mesg));
+ ret = xstrnsave("Vim:", 4 + STRLEN(mesg));
val = ret + 4;
}
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c
index 9ca01137cf..093ca238f1 100644
--- a/src/nvim/if_cscope.c
+++ b/src/nvim/if_cscope.c
@@ -433,7 +433,7 @@ static int cs_add_common(char *arg1, char *arg2, char *flags)
if (fname == NULL) {
goto add_err;
}
- fname = (char *)vim_strnsave((char_u *)fname, len);
+ fname = xstrnsave(fname, len);
xfree(fbuf);
FileInfo file_info;
bool file_info_ok = os_fileinfo(fname, &file_info);
diff --git a/src/nvim/menu.c b/src/nvim/menu.c
index 0af39b0b0b..f648a06284 100644
--- a/src/nvim/menu.c
+++ b/src/nvim/menu.c
@@ -1275,7 +1275,7 @@ static char *popup_mode_name(char *name, int idx)
size_t len = STRLEN(name);
assert(len >= 4);
- char *p = (char *)vim_strnsave((char_u *)name, len + 1);
+ char *p = xstrnsave(name, len + 1);
memmove(p + 6, p + 5, len - 4);
p[5] = menu_mode_chars[idx];
@@ -1308,7 +1308,7 @@ static char *menu_text(const char *str, int *mnemonic, char **actext)
*actext = xstrdup(p + 1);
}
assert(p >= str);
- text = (char *)vim_strnsave((char_u *)str, (size_t)(p - str));
+ text = xstrnsave(str, (size_t)(p - str));
} else {
text = xstrdup(str);
}
@@ -1560,7 +1560,7 @@ void ex_menutranslate(exarg_T *eap)
from = xstrdup(from);
from_noamp = menu_text(from, NULL, NULL);
assert(arg >= to);
- to = (char *)vim_strnsave((char_u *)to, (size_t)(arg - to));
+ to = xstrnsave(to, (size_t)(arg - to));
menu_translate_tab_and_shift(from);
menu_translate_tab_and_shift(to);
menu_unescape_name(from);
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index 9d4c64e4b1..848044ee7c 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -67,6 +67,13 @@ char_u *vim_strnsave(const char_u *string, size_t len)
return (char_u *)strncpy(xmallocz(len), (char *)string, len);
}
+/// A clone of vim_strnsave() that uses char* instead of char_u*
+char *xstrnsave(const char *string, size_t len)
+ FUNC_ATTR_NONNULL_RET FUNC_ATTR_MALLOC FUNC_ATTR_NONNULL_ALL
+{
+ return strncpy(xmallocz(len), string, len); // NOLINT(runtime/printf)
+}
+
/*
* Same as vim_strsave(), but any characters found in esc_chars are preceded
* by a backslash.