diff options
author | Sam Bingner <sam@bingner.com> | 2018-12-13 15:11:52 -1000 |
---|---|---|
committer | Sam Bingner <sam@bingner.com> | 2018-12-13 15:11:52 -1000 |
commit | 957aa75d05c00731d7112bed7b68ce4568667d0c (patch) | |
tree | 0445216818495a7864eaa3acde1a1570d34b958d /data/vim/patches/8.1.0438 | |
parent | c54a909c8b5a8519130803cf55f68603c0ad3682 (diff) |
Update vim
Diffstat (limited to 'data/vim/patches/8.1.0438')
-rw-r--r-- | data/vim/patches/8.1.0438 | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0438 b/data/vim/patches/8.1.0438 new file mode 100644 index 000000000..b3354224c --- /dev/null +++ b/data/vim/patches/8.1.0438 @@ -0,0 +1,344 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0438 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0438 +Problem: The ex_make() function is too long. +Solution: Split it into several functions. (Yegappan Lakshmanan) +Files: src/quickfix.c + + +*** ../vim-8.1.0437/src/quickfix.c 2018-09-25 22:08:10.933806882 +0200 +--- src/quickfix.c 2018-09-28 23:07:22.967590997 +0200 +*************** +*** 148,154 **** + static buf_T *qf_find_buf(qf_info_T *qi); + static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last); + static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last); +- static char_u *get_mef_name(void); + static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u *resulting_dir); + static void wipe_dummy_buffer(buf_T *buf, char_u *dirname_start); + static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start); +--- 148,153 ---- +*************** +*** 4480,4485 **** +--- 4479,4594 ---- + } + + /* ++ * Return the make/grep autocmd name. ++ */ ++ static char_u * ++ make_get_auname(cmdidx_T cmdidx) ++ { ++ switch (cmdidx) ++ { ++ case CMD_make: return (char_u *)"make"; ++ case CMD_lmake: return (char_u *)"lmake"; ++ case CMD_grep: return (char_u *)"grep"; ++ case CMD_lgrep: return (char_u *)"lgrep"; ++ case CMD_grepadd: return (char_u *)"grepadd"; ++ case CMD_lgrepadd: return (char_u *)"lgrepadd"; ++ default: return NULL; ++ } ++ } ++ ++ /* ++ * Return the name for the errorfile, in allocated memory. ++ * Find a new unique name when 'makeef' contains "##". ++ * Returns NULL for error. ++ */ ++ static char_u * ++ get_mef_name(void) ++ { ++ char_u *p; ++ char_u *name; ++ static int start = -1; ++ static int off = 0; ++ #ifdef HAVE_LSTAT ++ stat_T sb; ++ #endif ++ ++ if (*p_mef == NUL) ++ { ++ name = vim_tempname('e', FALSE); ++ if (name == NULL) ++ EMSG(_(e_notmp)); ++ return name; ++ } ++ ++ for (p = p_mef; *p; ++p) ++ if (p[0] == '#' && p[1] == '#') ++ break; ++ ++ if (*p == NUL) ++ return vim_strsave(p_mef); ++ ++ // Keep trying until the name doesn't exist yet. ++ for (;;) ++ { ++ if (start == -1) ++ start = mch_get_pid(); ++ else ++ off += 19; ++ ++ name = alloc((unsigned)STRLEN(p_mef) + 30); ++ if (name == NULL) ++ break; ++ STRCPY(name, p_mef); ++ sprintf((char *)name + (p - p_mef), "%d%d", start, off); ++ STRCAT(name, p + 2); ++ if (mch_getperm(name) < 0 ++ #ifdef HAVE_LSTAT ++ // Don't accept a symbolic link, it's a security risk. ++ && mch_lstat((char *)name, &sb) < 0 ++ #endif ++ ) ++ break; ++ vim_free(name); ++ } ++ return name; ++ } ++ ++ /* ++ * Form the complete command line to invoke 'make'/'grep'. Quote the command ++ * using 'shellquote' and append 'shellpipe'. Echo the fully formed command. ++ */ ++ static char_u * ++ make_get_fullcmd(char_u *makecmd, char_u *fname) ++ { ++ char_u *cmd; ++ unsigned len; ++ ++ len = (unsigned)STRLEN(p_shq) * 2 + (unsigned)STRLEN(makecmd) + 1; ++ if (*p_sp != NUL) ++ len += (unsigned)STRLEN(p_sp) + (unsigned)STRLEN(fname) + 3; ++ cmd = alloc(len); ++ if (cmd == NULL) ++ return NULL; ++ sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)makecmd, ++ (char *)p_shq); ++ ++ // If 'shellpipe' empty: don't redirect to 'errorfile'. ++ if (*p_sp != NUL) ++ append_redir(cmd, len, p_sp, fname); ++ ++ // Display the fully formed command. Output a newline if there's something ++ // else than the :make command that was typed (in which case the cursor is ++ // in column 0). ++ if (msg_col == 0) ++ msg_didout = FALSE; ++ msg_start(); ++ MSG_PUTS(":!"); ++ msg_outtrans(cmd); // show what we are doing ++ ++ return cmd; ++ } ++ ++ /* + * Used for ":make", ":lmake", ":grep", ":lgrep", ":grepadd", and ":lgrepadd" + */ + void +*************** +*** 4488,4517 **** + char_u *fname; + char_u *cmd; + char_u *enc = NULL; +- unsigned len; + win_T *wp = NULL; + qf_info_T *qi = &ql_info; + int res; + char_u *au_name = NULL; + int_u save_qfid; + +! /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */ + if (grep_internal(eap->cmdidx)) + { + ex_vimgrep(eap); + return; + } + +! switch (eap->cmdidx) +! { +! case CMD_make: au_name = (char_u *)"make"; break; +! case CMD_lmake: au_name = (char_u *)"lmake"; break; +! case CMD_grep: au_name = (char_u *)"grep"; break; +! case CMD_lgrep: au_name = (char_u *)"lgrep"; break; +! case CMD_grepadd: au_name = (char_u *)"grepadd"; break; +! case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break; +! default: break; +! } + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) + { +--- 4597,4616 ---- + char_u *fname; + char_u *cmd; + char_u *enc = NULL; + win_T *wp = NULL; + qf_info_T *qi = &ql_info; + int res; + char_u *au_name = NULL; + int_u save_qfid; + +! // Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". + if (grep_internal(eap->cmdidx)) + { + ex_vimgrep(eap); + return; + } + +! au_name = make_get_auname(eap->cmdidx); + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) + { +*************** +*** 4531,4567 **** + fname = get_mef_name(); + if (fname == NULL) + return; +! mch_remove(fname); /* in case it's not unique */ + +! /* +! * If 'shellpipe' empty: don't redirect to 'errorfile'. +! */ +! len = (unsigned)STRLEN(p_shq) * 2 + (unsigned)STRLEN(eap->arg) + 1; +! if (*p_sp != NUL) +! len += (unsigned)STRLEN(p_sp) + (unsigned)STRLEN(fname) + 3; +! cmd = alloc(len); + if (cmd == NULL) + return; +- sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg, +- (char *)p_shq); +- if (*p_sp != NUL) +- append_redir(cmd, len, p_sp, fname); +- /* +- * Output a newline if there's something else than the :make command that +- * was typed (in which case the cursor is in column 0). +- */ +- if (msg_col == 0) +- msg_didout = FALSE; +- msg_start(); +- MSG_PUTS(":!"); +- msg_outtrans(cmd); /* show what we are doing */ + +! /* let the shell know if we are redirecting output or not */ + do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0); + + #ifdef AMIGA + out_flush(); +! /* read window status report and redraw before message */ + (void)char_avail(); + #endif + +--- 4630,4647 ---- + fname = get_mef_name(); + if (fname == NULL) + return; +! mch_remove(fname); // in case it's not unique + +! cmd = make_get_fullcmd(eap->arg, fname); + if (cmd == NULL) + return; + +! // let the shell know if we are redirecting output or not + do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0); + + #ifdef AMIGA + out_flush(); +! // read window status report and redraw before message + (void)char_avail(); + #endif + +*************** +*** 4596,4658 **** + } + + /* +- * Return the name for the errorfile, in allocated memory. +- * Find a new unique name when 'makeef' contains "##". +- * Returns NULL for error. +- */ +- static char_u * +- get_mef_name(void) +- { +- char_u *p; +- char_u *name; +- static int start = -1; +- static int off = 0; +- #ifdef HAVE_LSTAT +- stat_T sb; +- #endif +- +- if (*p_mef == NUL) +- { +- name = vim_tempname('e', FALSE); +- if (name == NULL) +- EMSG(_(e_notmp)); +- return name; +- } +- +- for (p = p_mef; *p; ++p) +- if (p[0] == '#' && p[1] == '#') +- break; +- +- if (*p == NUL) +- return vim_strsave(p_mef); +- +- /* Keep trying until the name doesn't exist yet. */ +- for (;;) +- { +- if (start == -1) +- start = mch_get_pid(); +- else +- off += 19; +- +- name = alloc((unsigned)STRLEN(p_mef) + 30); +- if (name == NULL) +- break; +- STRCPY(name, p_mef); +- sprintf((char *)name + (p - p_mef), "%d%d", start, off); +- STRCAT(name, p + 2); +- if (mch_getperm(name) < 0 +- #ifdef HAVE_LSTAT +- /* Don't accept a symbolic link, it's a security risk. */ +- && mch_lstat((char *)name, &sb) < 0 +- #endif +- ) +- break; +- vim_free(name); +- } +- return name; +- } +- +- /* + * Returns the number of valid entries in the current quickfix/location list. + */ + int +--- 4676,4681 ---- +*** ../vim-8.1.0437/src/version.c 2018-09-28 22:26:47.790139298 +0200 +--- src/version.c 2018-09-28 23:08:51.738912574 +0200 +*************** +*** 796,797 **** +--- 796,799 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 438, + /**/ + +-- +Nobody will ever need more than 640 kB RAM. + -- Bill Gates, 1983 +Windows 98 requires 16 MB RAM. + -- Bill Gates, 1999 +Logical conclusion: Nobody will ever need Windows 98. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |