Mercurial > vim
comparison src/eval.c @ 5798:9f8fa56f1906 v7.4.243
updated for version 7.4.243
Problem: Cannot use setreg() to add text that includes a NUL.
Solution: Make setreg() accept a list.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 02 Apr 2014 22:17:10 +0200 |
parents | f084024c0ddb |
children | 76863b4b48a3 |
comparison
equal
deleted
inserted
replaced
5797:fa96ffb832d8 | 5798:9f8fa56f1906 |
---|---|
16788 if (strregname == NULL) | 16788 if (strregname == NULL) |
16789 return; /* type error; errmsg already given */ | 16789 return; /* type error; errmsg already given */ |
16790 regname = *strregname; | 16790 regname = *strregname; |
16791 if (regname == 0 || regname == '@') | 16791 if (regname == 0 || regname == '@') |
16792 regname = '"'; | 16792 regname = '"'; |
16793 else if (regname == '=') | |
16794 return; | |
16795 | 16793 |
16796 if (argvars[2].v_type != VAR_UNKNOWN) | 16794 if (argvars[2].v_type != VAR_UNKNOWN) |
16797 { | 16795 { |
16798 stropt = get_tv_string_chk(&argvars[2]); | 16796 stropt = get_tv_string_chk(&argvars[2]); |
16799 if (stropt == NULL) | 16797 if (stropt == NULL) |
16820 } | 16818 } |
16821 break; | 16819 break; |
16822 } | 16820 } |
16823 } | 16821 } |
16824 | 16822 |
16825 strval = get_tv_string_chk(&argvars[1]); | 16823 if (argvars[1].v_type == VAR_LIST) |
16826 if (strval != NULL) | 16824 { |
16825 char_u **lstval; | |
16826 char_u **curval; | |
16827 int len = argvars[1].vval.v_list->lv_len; | |
16828 listitem_T *li; | |
16829 | |
16830 lstval = (char_u **)alloc(sizeof(char_u *) * (len + 1)); | |
16831 if (lstval == NULL) | |
16832 return; | |
16833 curval = lstval; | |
16834 | |
16835 for (li = argvars[1].vval.v_list->lv_first; li != NULL; | |
16836 li = li->li_next) | |
16837 { | |
16838 /* TODO: this may use a static buffer several times. */ | |
16839 strval = get_tv_string_chk(&li->li_tv); | |
16840 if (strval == NULL) | |
16841 { | |
16842 vim_free(lstval); | |
16843 return; | |
16844 } | |
16845 *curval++ = strval; | |
16846 } | |
16847 *curval++ = NULL; | |
16848 | |
16849 write_reg_contents_lst(regname, lstval, -1, | |
16850 append, yank_type, block_len); | |
16851 vim_free(lstval); | |
16852 } | |
16853 else | |
16854 { | |
16855 strval = get_tv_string_chk(&argvars[1]); | |
16856 if (strval == NULL) | |
16857 return; | |
16827 write_reg_contents_ex(regname, strval, -1, | 16858 write_reg_contents_ex(regname, strval, -1, |
16828 append, yank_type, block_len); | 16859 append, yank_type, block_len); |
16860 } | |
16829 rettv->vval.v_number = 0; | 16861 rettv->vval.v_number = 0; |
16830 } | 16862 } |
16831 | 16863 |
16832 /* | 16864 /* |
16833 * "settabvar()" function | 16865 * "settabvar()" function |