diff options
author | Bram Moolenaar <Bram@vim.org> | 2009-11-03 13:26:55 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2009-11-03 13:26:55 +0000 |
commit | 2f59b5c1cc6fe153469ad1b4f13ae3fce8825f4f (patch) | |
tree | 405100ef2561c3b2229b027f776819bc9b89c93b | |
parent | d0ba34a6e56cad53e2ac3e34ecd881aacf1dd434 (diff) | |
download | vim-git-2f59b5c1cc6fe153469ad1b4f13ae3fce8825f4f.tar.gz |
updated for version 7.2-273v7.2.273
-rw-r--r-- | src/eval.c | 24 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 18 insertions, 8 deletions
diff --git a/src/eval.c b/src/eval.c index a48e15293..aff6152ec 100644 --- a/src/eval.c +++ b/src/eval.c @@ -988,13 +988,14 @@ var_redir_start(name, append) int err; typval_T tv; - /* Make sure a valid variable name is specified */ + /* Catch a bad name early. */ if (!eval_isnamec1(*name)) { EMSG(_(e_invarg)); return FAIL; } + /* Make a copy of the name, it is used in redir_lval until redir ends. */ redir_varname = vim_strsave(name); if (redir_varname == NULL) return FAIL; @@ -1019,6 +1020,7 @@ var_redir_start(name, append) EMSG(_(e_trailing)); else EMSG(_(e_invarg)); + redir_endp = NULL; /* don't store a value, only cleanup */ var_redir_stop(); return FAIL; } @@ -1037,6 +1039,7 @@ var_redir_start(name, append) did_emsg |= save_emsg; if (err) { + redir_endp = NULL; /* don't store a value, only cleanup */ var_redir_stop(); return FAIL; } @@ -1085,6 +1088,7 @@ var_redir_str(value, value_len) /* * Stop redirecting command output to a variable. + * Frees the allocated memory. */ void var_redir_stop() @@ -1093,14 +1097,18 @@ var_redir_stop() if (redir_lval != NULL) { - /* Append the trailing NUL. */ - ga_append(&redir_ga, NUL); + /* If there was no error: assign the text to the variable. */ + if (redir_endp != NULL) + { + ga_append(&redir_ga, NUL); /* Append the trailing NUL. */ + tv.v_type = VAR_STRING; + tv.vval.v_string = redir_ga.ga_data; + set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)"."); + } - /* Assign the text to the variable. */ - tv.v_type = VAR_STRING; - tv.vval.v_string = redir_ga.ga_data; - set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)"."); - vim_free(tv.vval.v_string); + /* free the collected output */ + vim_free(redir_ga.ga_data); + redir_ga.ga_data = NULL; clear_lval(redir_lval); vim_free(redir_lval); diff --git a/src/version.c b/src/version.c index 9dff42c00..3c38d2297 100644 --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 273, +/**/ 272, /**/ 271, |