comparison src/evalfunc.c @ 10522:7232cd9f8a7c v8.0.0151

commit https://github.com/vim/vim/commit/12c4492dd35e0cd83c8816be2ec849b836109882 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 8 13:26:03 2017 +0100 patch 8.0.0151: passing buffer content to system() is clumsy Problem: To pass buffer content to system() and systemlist() one has to first create a string or list. Solution: Allow passing a buffer number. (LemonBoy, closes #1240)
author Christian Brabandt <cb@256bit.org>
date Sun, 08 Jan 2017 13:30:04 +0100
parents 1435e45ee6fa
children f83b6a0b6148
comparison
equal deleted inserted replaced
10521:3dd44fd29319 10522:7232cd9f8a7c
11815 int retlist) 11815 int retlist)
11816 { 11816 {
11817 char_u *res = NULL; 11817 char_u *res = NULL;
11818 char_u *p; 11818 char_u *p;
11819 char_u *infile = NULL; 11819 char_u *infile = NULL;
11820 char_u buf[NUMBUFLEN];
11821 int err = FALSE; 11820 int err = FALSE;
11822 FILE *fd; 11821 FILE *fd;
11823 list_T *list = NULL; 11822 list_T *list = NULL;
11824 int flags = SHELL_SILENT; 11823 int flags = SHELL_SILENT;
11825 11824
11829 goto errret; 11828 goto errret;
11830 11829
11831 if (argvars[1].v_type != VAR_UNKNOWN) 11830 if (argvars[1].v_type != VAR_UNKNOWN)
11832 { 11831 {
11833 /* 11832 /*
11834 * Write the string to a temp file, to be used for input of the shell 11833 * Write the text to a temp file, to be used for input of the shell
11835 * command. 11834 * command.
11836 */ 11835 */
11837 if ((infile = vim_tempname('i', TRUE)) == NULL) 11836 if ((infile = vim_tempname('i', TRUE)) == NULL)
11838 { 11837 {
11839 EMSG(_(e_notmp)); 11838 EMSG(_(e_notmp));
11844 if (fd == NULL) 11843 if (fd == NULL)
11845 { 11844 {
11846 EMSG2(_(e_notopen), infile); 11845 EMSG2(_(e_notopen), infile);
11847 goto errret; 11846 goto errret;
11848 } 11847 }
11849 if (argvars[1].v_type == VAR_LIST) 11848 if (argvars[1].v_type == VAR_NUMBER)
11849 {
11850 linenr_T lnum;
11851 buf_T *buf;
11852
11853 buf = buflist_findnr(argvars[1].vval.v_number);
11854 if (buf == NULL)
11855 {
11856 EMSGN(_(e_nobufnr), argvars[1].vval.v_number);
11857 goto errret;
11858 }
11859
11860 for (lnum = 1; lnum <= buf->b_ml.ml_line_count; lnum++)
11861 {
11862 for (p = ml_get_buf(buf, lnum, FALSE); *p != NUL; ++p)
11863 if (putc(*p == '\n' ? NUL : *p, fd) == EOF)
11864 {
11865 err = TRUE;
11866 break;
11867 }
11868 if (putc(NL, fd) == EOF)
11869 {
11870 err = TRUE;
11871 break;
11872 }
11873 }
11874 }
11875 else if (argvars[1].v_type == VAR_LIST)
11850 { 11876 {
11851 if (write_list(fd, argvars[1].vval.v_list, TRUE) == FAIL) 11877 if (write_list(fd, argvars[1].vval.v_list, TRUE) == FAIL)
11852 err = TRUE; 11878 err = TRUE;
11853 } 11879 }
11854 else 11880 else
11855 { 11881 {
11856 size_t len; 11882 size_t len;
11883 char_u buf[NUMBUFLEN];
11857 11884
11858 p = get_tv_string_buf_chk(&argvars[1], buf); 11885 p = get_tv_string_buf_chk(&argvars[1], buf);
11859 if (p == NULL) 11886 if (p == NULL)
11860 { 11887 {
11861 fclose(fd); 11888 fclose(fd);