Mercurial > vim
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); |