aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJurica Bradaric <jurica.bradaric@avl.com>2017-03-06 21:33:55 +0100
committerJurica Bradaric <jurica.bradaric@avl.com>2017-03-06 21:35:48 +0100
commit04b91d6b89f12df314e0d209afe2d5f872c5caf2 (patch)
tree3f5c368b4dddf450716a0312e3d57fb33f306bf9
parent2f80360e9acdb32f63633e8408c00de2ef972b3b (diff)
downloadrneovim-04b91d6b89f12df314e0d209afe2d5f872c5caf2.tar.gz
rneovim-04b91d6b89f12df314e0d209afe2d5f872c5caf2.tar.bz2
rneovim-04b91d6b89f12df314e0d209afe2d5f872c5caf2.zip
strings.c: Fix problems found during code review.
-rw-r--r--src/nvim/strings.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index 6bfb63251c..0dc27061f4 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -588,17 +588,14 @@ static varnumber_T tv_nr(typval_T *tvs, int *idxp)
/// @param[in] tvs List of VimL values. List is terminated by VAR_UNKNOWN
/// value.
/// @param[in,out] idxp Index in a list. Will be incremented.
-///
-/// @param[out] tofree If "tofree" is NULL get_tv_string_chk() is used. Some
-/// types (e.g. List) are not converted to a string. If
-/// "tofree" is not NULL encode_tv2echo() is used. All
-/// types are converted to a string with the same format as
-/// ":echo". The caller must free "*tofree".
+/// @param[out] tofree If the idxp entry in tvs is not a String or a Number,
+/// it will be converted to String in the same format
+/// as ":echo" and stored in "*tofree". The caller must
+/// free "*tofree".
///
/// @return String value or NULL in case of error.
-static char *tv_str(typval_T *tvs, int *idxp, char_u **tofree)
- FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
- FUNC_ATTR_WARN_UNUSED_RESULT
+static char *tv_str(typval_T *tvs, int *idxp, char ** const tofree)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
int idx = *idxp - 1;
char *s = NULL;
@@ -607,11 +604,12 @@ static char *tv_str(typval_T *tvs, int *idxp, char_u **tofree)
EMSG(_(e_printf));
} else {
(*idxp)++;
- if (tofree != NULL) {
- s = encode_tv2echo(&tvs[idx], NULL);
- *tofree = (char_u *)s;
- } else {
+ if (tvs[idx].v_type == VAR_STRING || tvs[idx].v_type == VAR_NUMBER) {
s = (char *)get_tv_string_chk(&tvs[idx]);
+ *tofree = NULL;
+ } else {
+ s = encode_tv2echo(&tvs[idx], NULL);
+ *tofree = s;
}
}
return s;
@@ -827,7 +825,7 @@ int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap,
char fmt_spec = '\0';
// buffer for 's' and 'S' specs
- char_u *tofree = NULL;
+ char *tofree = NULL;
p++; // skip '%'