summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2006-02-24 23:53:04 +0000
committerBram Moolenaar <Bram@vim.org>2006-02-24 23:53:04 +0000
commit32466aa2e9c45ab355dbaf99a9eedf334bc2e29f (patch)
tree1644d959a04f9f8c6ea5a8fe3c79f037c6915559 /src/eval.c
parent2a3f7eeebfa05a33cc1d8fbba66a3dff976e8dd7 (diff)
downloadvim-git-32466aa2e9c45ab355dbaf99a9eedf334bc2e29f.tar.gz
updated for version 7.0206v7.0206
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/eval.c b/src/eval.c
index fef09d02f..52525e6c4 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -14934,7 +14934,6 @@ f_tabpagenr(argvars, rettv)
{
int nr = 1;
#ifdef FEAT_WINDOWS
- tabpage_T *tp;
char_u *arg;
if (argvars[0].v_type != VAR_UNKNOWN)
@@ -14944,15 +14943,13 @@ f_tabpagenr(argvars, rettv)
if (arg != NULL)
{
if (STRCMP(arg, "$") == 0)
- for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
- ++nr;
+ nr = tabpage_index(NULL);
else
EMSG2(_(e_invexpr2), arg);
}
}
else
- for (tp = first_tabpage; tp != curtab; tp = tp->tp_next)
- ++nr;
+ nr = tabpage_index(curtab);
#endif
rettv->vval.v_number = nr;
}
@@ -15616,6 +15613,7 @@ f_writefile(argvars, rettv)
/*
* Translate a String variable into a position.
+ * Returns NULL when there is an error.
*/
static pos_T *
var2fpos(varp, lnum)
@@ -15626,6 +15624,39 @@ var2fpos(varp, lnum)
static pos_T pos;
pos_T *pp;
+ /* Argument can be [lnum, col]. */
+ if (varp->v_type == VAR_LIST)
+ {
+ list_T *l;
+ listitem_T *li;
+ int len;
+
+ l = varp->vval.v_list;
+ if (l == NULL)
+ return NULL;
+
+ /* Get the line number */
+ li = list_find(l, 0L);
+ if (li == NULL)
+ return NULL;
+ pos.lnum = get_tv_number(&li->li_tv);
+ if (pos.lnum <= 0 || pos.lnum > curbuf->b_ml.ml_line_count)
+ return NULL; /* invalid line number */
+
+ /* Get the column number */
+ li = list_find(l, 1L);
+ if (li == NULL)
+ return NULL;
+ pos.col = get_tv_number(&li->li_tv);
+ len = (long)STRLEN(ml_get(pos.lnum));
+ if (pos.col <= 0 || ((len == 0 && pos.col > 1)
+ || (len > 0 && pos.col > len)))
+ return NULL; /* invalid column number */
+
+ pos.col--;
+ return &pos;
+ }
+
name = get_tv_string_chk(varp);
if (name == NULL)
return NULL;