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