Hello community,
here is the log from the commit of package vim for openSUSE:13.1 checked in at 2013-10-01 08:35:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:13.1/vim (Old)
and /work/SRC/openSUSE:13.1/.vim.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "vim"
Changes:
--------
--- /work/SRC/openSUSE:13.1/vim/vim.changes 2013-09-26 20:07:24.000000000 +0200
+++ /work/SRC/openSUSE:13.1/.vim.new/vim.changes 2013-10-01 08:35:57.000000000 +0200
@@ -1,0 +2,18 @@
+Mon Sep 30 08:14:20 UTC 2013 - idonmez@suse.com
+
+- Updated to revision 045, fixes the following problems
+ * NFA engine does not capture group correctly when using \@>. (ZyX)
+ * Using "\ze" in a sub-pattern does not result in the end of the
+ match to be set. (Axel Bender)
+ * Using "zw" and "zg" when 'spell' is off give a confusing error
+ message. (Gary Johnson)
+ * Valgrind error on exit when a script-local variable holds a
+ reference to the scope of another script.
+ * Visual selection does not remain after being copied over. (Axel
+ Bender)
+ * When using ":setlocal" for 'spell' and 'spellang' then :spelldump
+ doesn't work. (Dimitar Dimitrov)
+ * substitute() does not work properly when the pattern starts with
+ "\ze".
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ vim.spec ++++++
--- /var/tmp/diff_new_pack.zDIz6r/_old 2013-10-01 08:35:58.000000000 +0200
+++ /var/tmp/diff_new_pack.zDIz6r/_new 2013-10-01 08:35:58.000000000 +0200
@@ -17,7 +17,7 @@
%define pkg_version 7.4
-%define official_ptchlvl 035
+%define official_ptchlvl 045
%define VIM_SUBDIR vim74
%define site_runtimepath /usr/share/vim/site
%define make make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/current MAKE="make -e" %{?_smp_mflags}
++++++ vim-7.4-patches.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.036 new/vim-7.4-patches/7.4.036
--- old/vim-7.4-patches/7.4.036 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.036 2013-09-25 16:42:32.000000000 +0200
@@ -0,0 +1,273 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.036
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.036
+Problem: NFA engine does not capture group correctly when using \@>. (ZyX)
+Solution: Copy submatches before doing the recursive match.
+Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+
+*** ../vim-7.4.035/src/regexp_nfa.c 2013-09-22 13:57:19.000000000 +0200
+--- src/regexp_nfa.c 2013-09-25 16:35:54.000000000 +0200
+***************
+*** 36,42 ****
+ {
+ NFA_SPLIT = -1024,
+ NFA_MATCH,
+! NFA_SKIP_CHAR, /* matches a 0-length char */
+
+ NFA_START_COLL, /* [abc] start */
+ NFA_END_COLL, /* [abc] end */
+--- 36,42 ----
+ {
+ NFA_SPLIT = -1024,
+ NFA_MATCH,
+! NFA_EMPTY, /* matches 0-length */
+
+ NFA_START_COLL, /* [abc] start */
+ NFA_END_COLL, /* [abc] end */
+***************
+*** 2005,2012 ****
+ {
+ /* Ignore result of previous call to nfa_regatom() */
+ post_ptr = post_start + my_post_start;
+! /* NFA_SKIP_CHAR has 0-length and works everywhere */
+! EMIT(NFA_SKIP_CHAR);
+ return OK;
+ }
+
+--- 2005,2012 ----
+ {
+ /* Ignore result of previous call to nfa_regatom() */
+ post_ptr = post_start + my_post_start;
+! /* NFA_EMPTY is 0-length and works everywhere */
+! EMIT(NFA_EMPTY);
+ return OK;
+ }
+
+***************
+*** 2170,2185 ****
+ old_post_pos = (int)(post_ptr - post_start);
+ if (nfa_regconcat() == FAIL)
+ return FAIL;
+! /* if concat is empty, skip a input char. But do emit a node */
+ if (old_post_pos == (int)(post_ptr - post_start))
+! EMIT(NFA_SKIP_CHAR);
+ EMIT(NFA_CONCAT);
+ ch = peekchr();
+ }
+
+! /* Even if a branch is empty, emit one node for it */
+ if (old_post_pos == (int)(post_ptr - post_start))
+! EMIT(NFA_SKIP_CHAR);
+
+ return OK;
+ }
+--- 2170,2185 ----
+ old_post_pos = (int)(post_ptr - post_start);
+ if (nfa_regconcat() == FAIL)
+ return FAIL;
+! /* if concat is empty do emit a node */
+ if (old_post_pos == (int)(post_ptr - post_start))
+! EMIT(NFA_EMPTY);
+ EMIT(NFA_CONCAT);
+ ch = peekchr();
+ }
+
+! /* if a branch is empty, emit one node for it */
+ if (old_post_pos == (int)(post_ptr - post_start))
+! EMIT(NFA_EMPTY);
+
+ return OK;
+ }
+***************
+*** 2423,2429 ****
+ case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break;
+ case NFA_QUEST: STRCPY(code, "NFA_QUEST"); break;
+ case NFA_QUEST_NONGREEDY: STRCPY(code, "NFA_QUEST_NON_GREEDY"); break;
+! case NFA_SKIP_CHAR: STRCPY(code, "NFA_SKIP_CHAR"); break;
+ case NFA_OR: STRCPY(code, "NFA_OR"); break;
+
+ case NFA_START_COLL: STRCPY(code, "NFA_START_COLL"); break;
+--- 2423,2429 ----
+ case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break;
+ case NFA_QUEST: STRCPY(code, "NFA_QUEST"); break;
+ case NFA_QUEST_NONGREEDY: STRCPY(code, "NFA_QUEST_NON_GREEDY"); break;
+! case NFA_EMPTY: STRCPY(code, "NFA_EMPTY"); break;
+ case NFA_OR: STRCPY(code, "NFA_OR"); break;
+
+ case NFA_START_COLL: STRCPY(code, "NFA_START_COLL"); break;
+***************
+*** 3067,3073 ****
+ case NFA_ZSTART:
+ case NFA_ZEND:
+ case NFA_OPT_CHARS:
+! case NFA_SKIP_CHAR:
+ case NFA_START_PATTERN:
+ case NFA_END_PATTERN:
+ case NFA_COMPOSING:
+--- 3067,3073 ----
+ case NFA_ZSTART:
+ case NFA_ZEND:
+ case NFA_OPT_CHARS:
+! case NFA_EMPTY:
+ case NFA_START_PATTERN:
+ case NFA_END_PATTERN:
+ case NFA_COMPOSING:
+***************
+*** 3265,3279 ****
+ PUSH(frag(e1.start, e2.out));
+ break;
+
+! case NFA_SKIP_CHAR:
+! /* Symbol of 0-length, Used in a repetition
+! * with max/min count of 0 */
+ if (nfa_calc_size == TRUE)
+ {
+ nstate++;
+ break;
+ }
+! s = alloc_state(NFA_SKIP_CHAR, NULL, NULL);
+ if (s == NULL)
+ goto theend;
+ PUSH(frag(s, list1(&s->out)));
+--- 3265,3278 ----
+ PUSH(frag(e1.start, e2.out));
+ break;
+
+! case NFA_EMPTY:
+! /* 0-length, used in a repetition with max/min count of 0 */
+ if (nfa_calc_size == TRUE)
+ {
+ nstate++;
+ break;
+ }
+! s = alloc_state(NFA_EMPTY, NULL, NULL);
+ if (s == NULL)
+ goto theend;
+ PUSH(frag(s, list1(&s->out)));
+***************
+*** 4209,4215 ****
+ case NFA_MOPEN:
+ case NFA_ZEND:
+ case NFA_SPLIT:
+! case NFA_SKIP_CHAR:
+ /* These nodes are not added themselves but their "out" and/or
+ * "out1" may be added below. */
+ break;
+--- 4208,4214 ----
+ case NFA_MOPEN:
+ case NFA_ZEND:
+ case NFA_SPLIT:
+! case NFA_EMPTY:
+ /* These nodes are not added themselves but their "out" and/or
+ * "out1" may be added below. */
+ break;
+***************
+*** 4337,4343 ****
+ subs = addstate(l, state->out1, subs, pim, off);
+ break;
+
+! case NFA_SKIP_CHAR:
+ case NFA_NOPEN:
+ case NFA_NCLOSE:
+ subs = addstate(l, state->out, subs, pim, off);
+--- 4336,4342 ----
+ subs = addstate(l, state->out1, subs, pim, off);
+ break;
+
+! case NFA_EMPTY:
+ case NFA_NOPEN:
+ case NFA_NCLOSE:
+ subs = addstate(l, state->out, subs, pim, off);
+***************
+*** 5604,5612 ****
+ {
+ int in_use = m->norm.in_use;
+
+! /* Copy submatch info for the recursive call, so that
+! * \1 can be matched. */
+ copy_sub_off(&m->norm, &t->subs.norm);
+
+ /*
+ * First try matching the invisible match, then what
+--- 5603,5615 ----
+ {
+ int in_use = m->norm.in_use;
+
+! /* Copy submatch info for the recursive call, opposite
+! * of what happens on success below. */
+ copy_sub_off(&m->norm, &t->subs.norm);
++ #ifdef FEAT_SYN_HL
++ if (nfa_has_zsubexpr)
++ copy_sub_off(&m->synt, &t->subs.synt);
++ #endif
+
+ /*
+ * First try matching the invisible match, then what
+***************
+*** 5713,5718 ****
+--- 5716,5728 ----
+ #endif
+ break;
+ }
++ /* Copy submatch info to the recursive call, opposite of what
++ * happens afterwards. */
++ copy_sub_off(&m->norm, &t->subs.norm);
++ #ifdef FEAT_SYN_HL
++ if (nfa_has_zsubexpr)
++ copy_sub_off(&m->synt, &t->subs.synt);
++ #endif
+
+ /* First try matching the pattern. */
+ result = recursive_regmatch(t->state, NULL, prog,
+*** ../vim-7.4.035/src/testdir/test64.in 2013-09-22 13:57:19.000000000 +0200
+--- src/testdir/test64.in 2013-09-25 15:51:12.000000000 +0200
+***************
+*** 430,435 ****
+--- 430,436 ----
+ :call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
+ :call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa'])
+ :call add(tl, [2, '^\(.\{-}b\)\@>.', ' abcbd', ' abc', ' ab'])
++ :call add(tl, [2, '\(.\{-}\)\(\)\@>$', 'abc', 'abc', 'abc', ''])
+ :" TODO: BT engine does not restore submatch after failure
+ :call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa'])
+ :"
+*** ../vim-7.4.035/src/testdir/test64.ok 2013-09-22 13:57:19.000000000 +0200
+--- src/testdir/test64.ok 2013-09-25 16:39:31.000000000 +0200
+***************
+*** 992,997 ****
+--- 992,1000 ----
+ OK 0 - ^\(.\{-}b\)\@>.
+ OK 1 - ^\(.\{-}b\)\@>.
+ OK 2 - ^\(.\{-}b\)\@>.
++ OK 0 - \(.\{-}\)\(\)\@>$
++ OK 1 - \(.\{-}\)\(\)\@>$
++ OK 2 - \(.\{-}\)\(\)\@>$
+ OK 0 - \(a*\)\@>a\|a\+
+ OK 2 - \(a*\)\@>a\|a\+
+ OK 0 - \_[^8-9]\+
+*** ../vim-7.4.035/src/version.c 2013-09-22 15:43:34.000000000 +0200
+--- src/version.c 2013-09-25 16:40:01.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 36,
+ /**/
+
+--
+There is a fine line between courage and foolishness.
+Unfortunately, it's not a fence.
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.037 new/vim-7.4-patches/7.4.037
--- old/vim-7.4-patches/7.4.037 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.037 2013-09-25 18:17:39.000000000 +0200
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.037
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.037
+Problem: Using "\ze" in a sub-pattern does not result in the end of the
+ match to be set. (Axel Bender)
+Solution: Copy the end of match position when a recursive match was
+ successful.
+Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+
+*** ../vim-7.4.036/src/regexp_nfa.c 2013-09-25 16:41:50.000000000 +0200
+--- src/regexp_nfa.c 2013-09-25 18:09:59.000000000 +0200
+***************
+*** 3822,3827 ****
+--- 3822,3828 ----
+ static void clear_sub __ARGS((regsub_T *sub));
+ static void copy_sub __ARGS((regsub_T *to, regsub_T *from));
+ static void copy_sub_off __ARGS((regsub_T *to, regsub_T *from));
++ static void copy_ze_off __ARGS((regsub_T *to, regsub_T *from));
+ static int sub_equal __ARGS((regsub_T *sub1, regsub_T *sub2));
+ static int match_backref __ARGS((regsub_T *sub, int subidx, int *bytelen));
+ static int has_state_with_pos __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim));
+***************
+*** 3909,3914 ****
+--- 3910,3938 ----
+ }
+
+ /*
++ * Like copy_sub() but only do the end of the main match if \ze is present.
++ */
++ static void
++ copy_ze_off(to, from)
++ regsub_T *to;
++ regsub_T *from;
++ {
++ if (nfa_has_zend)
++ {
++ if (REG_MULTI)
++ {
++ if (from->list.multi[0].end.lnum >= 0)
++ to->list.multi[0].end = from->list.multi[0].end;
++ }
++ else
++ {
++ if (from->list.line[0].end != NULL)
++ to->list.line[0].end = from->list.line[0].end;
++ }
++ }
++ }
++
++ /*
+ * Return TRUE if "sub1" and "sub2" have the same start positions.
+ */
+ static int
+***************
+*** 5308,5313 ****
+--- 5332,5338 ----
+ * When "nfa_endp" is not NULL it is a required end-of-match position.
+ *
+ * Return TRUE if there is a match, FALSE otherwise.
++ * When there is a match "submatch" contains the positions.
+ * Note: Caller must ensure that: start != NULL.
+ */
+ static int
+***************
+*** 5633,5638 ****
+--- 5658,5666 ----
+ if (nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &m->synt);
+ #endif
++ /* If the pattern has \ze and it matched in the
++ * sub pattern, use it. */
++ copy_ze_off(&t->subs.norm, &m->norm);
+
+ /* t->state->out1 is the corresponding
+ * END_INVISIBLE node; Add its out to the current
+*** ../vim-7.4.036/src/testdir/test64.in 2013-09-25 16:41:50.000000000 +0200
+--- src/testdir/test64.in 2013-09-25 18:09:16.000000000 +0200
+***************
+*** 425,430 ****
+--- 425,431 ----
+ :"
+ :" complicated look-behind match
+ :call add(tl, [2, '\(r\@<=\|\w\@
+ :call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
+*** ../vim-7.4.036/src/testdir/test64.ok 2013-09-25 16:41:50.000000000 +0200
+--- src/testdir/test64.ok 2013-09-25 18:10:05.000000000 +0200
+***************
+*** 983,988 ****
+--- 983,991 ----
+ OK 0 - \(r\@<=\|\w\@a
+ OK 1 - \(a*\)\@>a
+ OK 2 - \(a*\)\@>a
+*** ../vim-7.4.036/src/version.c 2013-09-25 16:41:50.000000000 +0200
+--- src/version.c 2013-09-25 18:14:36.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 37,
+ /**/
+
+--
+MAN: You don't frighten us, English pig-dog! Go and boil your bottoms,
+ son of a silly person. I blow my nose on you, so-called Arthur-king,
+ you and your silly English K...kaniggets.
+ He puts hands to his ears and blows a raspberry.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.038 new/vim-7.4-patches/7.4.038
--- old/vim-7.4-patches/7.4.038 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.038 2013-09-25 18:55:14.000000000 +0200
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.038
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.038
+Problem: Using "zw" and "zg" when 'spell' is off give a confusing error
+ message. (Gary Johnson)
+Solution: Ignore the error when locating the word. Explicitly mention what
+ word was added. (Christian Brabandt)
+Files: src/normal.c, src/spell.c
+
+
+*** ../vim-7.4.037/src/normal.c 2013-09-22 15:23:38.000000000 +0200
+--- src/normal.c 2013-09-25 18:54:08.000000000 +0200
+***************
+*** 5246,5253 ****
+ {
+ pos_T pos = curwin->w_cursor;
+
+! /* Find bad word under the cursor. */
+ len = spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL);
+ if (len != 0 && curwin->w_cursor.col <= pos.col)
+ ptr = ml_get_pos(&curwin->w_cursor);
+ curwin->w_cursor = pos;
+--- 5246,5257 ----
+ {
+ pos_T pos = curwin->w_cursor;
+
+! /* Find bad word under the cursor. When 'spell' is
+! * off this fails and find_ident_under_cursor() is
+! * used below. */
+! emsg_off++;
+ len = spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL);
++ emsg_off--;
+ if (len != 0 && curwin->w_cursor.col <= pos.col)
+ ptr = ml_get_pos(&curwin->w_cursor);
+ curwin->w_cursor = pos;
+*** ../vim-7.4.037/src/spell.c 2013-07-17 17:28:28.000000000 +0200
+--- src/spell.c 2013-09-25 18:48:55.000000000 +0200
+***************
+*** 9479,9485 ****
+ if (undo)
+ {
+ home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
+! smsg((char_u *)_("Word removed from %s"), NameBuff);
+ }
+ }
+ fseek(fd, fpos_next, SEEK_SET);
+--- 9479,9486 ----
+ if (undo)
+ {
+ home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
+! smsg((char_u *)_("Word '%.*s' removed from %s"),
+! len, word, NameBuff);
+ }
+ }
+ fseek(fd, fpos_next, SEEK_SET);
+***************
+*** 9525,9531 ****
+ fclose(fd);
+
+ home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
+! smsg((char_u *)_("Word added to %s"), NameBuff);
+ }
+ }
+
+--- 9526,9532 ----
+ fclose(fd);
+
+ home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
+! smsg((char_u *)_("Word '%.*s' added to %s"), len, word, NameBuff);
+ }
+ }
+
+***************
+*** 10135,10141 ****
+ }
+
+ /*
+! * "z?": Find badly spelled word under or after the cursor.
+ * Give suggestions for the properly spelled word.
+ * In Visual mode use the highlighted word as the bad word.
+ * When "count" is non-zero use that suggestion.
+--- 10136,10142 ----
+ }
+
+ /*
+! * "z=": Find badly spelled word under or after the cursor.
+ * Give suggestions for the properly spelled word.
+ * In Visual mode use the highlighted word as the bad word.
+ * When "count" is non-zero use that suggestion.
+*** ../vim-7.4.037/src/version.c 2013-09-25 18:16:34.000000000 +0200
+--- src/version.c 2013-09-25 18:52:47.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 38,
+ /**/
+
+--
+MAN: Fetchez la vache!
+GUARD: Quoi?
+MAN: Fetchez la vache!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.039 new/vim-7.4-patches/7.4.039
--- old/vim-7.4-patches/7.4.039 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.039 2013-09-25 19:14:20.000000000 +0200
@@ -0,0 +1,217 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.039
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.039
+Problem: MS-Windows: MSCV10 and earlier can't handle symlinks to a
+ directory properly.
+Solution: Add stat_symlink_aware() and wstat_symlink_aware(). (Ken Takata)
+Files: src/os_mswin.c, src/os_win32.c, src/os_win32.h
+
+
+*** ../vim-7.4.038/src/os_mswin.c 2013-08-30 16:51:15.000000000 +0200
+--- src/os_mswin.c 2013-09-25 19:09:53.000000000 +0200
+***************
+*** 498,503 ****
+--- 498,595 ----
+ }
+ }
+
++ static int
++ stat_symlink_aware(const char *name, struct stat *stp)
++ {
++ #if defined(_MSC_VER) && _MSC_VER < 1700
++ /* Work around for VC10 or earlier. stat() can't handle symlinks properly.
++ * VC9 or earlier: stat() doesn't support a symlink at all. It retrieves
++ * status of a symlink itself.
++ * VC10: stat() supports a symlink to a normal file, but it doesn't support
++ * a symlink to a directory (always returns an error). */
++ WIN32_FIND_DATA findData;
++ HANDLE hFind, h;
++ DWORD attr = 0;
++ BOOL is_symlink = FALSE;
++
++ hFind = FindFirstFile(name, &findData);
++ if (hFind != INVALID_HANDLE_VALUE)
++ {
++ attr = findData.dwFileAttributes;
++ if ((attr & FILE_ATTRIBUTE_REPARSE_POINT)
++ && (findData.dwReserved0 == IO_REPARSE_TAG_SYMLINK))
++ is_symlink = TRUE;
++ FindClose(hFind);
++ }
++ if (is_symlink)
++ {
++ h = CreateFile(name, FILE_READ_ATTRIBUTES,
++ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
++ OPEN_EXISTING,
++ (attr & FILE_ATTRIBUTE_DIRECTORY)
++ ? FILE_FLAG_BACKUP_SEMANTICS : 0,
++ NULL);
++ if (h != INVALID_HANDLE_VALUE)
++ {
++ int fd, n;
++
++ fd = _open_osfhandle((intptr_t)h, _O_RDONLY);
++ n = _fstat(fd, (struct _stat*)stp);
++ _close(fd);
++ return n;
++ }
++ }
++ #endif
++ return stat(name, stp);
++ }
++
++ #ifdef FEAT_MBYTE
++ static int
++ wstat_symlink_aware(const WCHAR *name, struct _stat *stp)
++ {
++ # if defined(_MSC_VER) && _MSC_VER < 1700
++ /* Work around for VC10 or earlier. _wstat() can't handle symlinks properly.
++ * VC9 or earlier: _wstat() doesn't support a symlink at all. It retrieves
++ * status of a symlink itself.
++ * VC10: _wstat() supports a symlink to a normal file, but it doesn't
++ * support a symlink to a directory (always returns an error). */
++ int n;
++ BOOL is_symlink = FALSE;
++ HANDLE hFind, h;
++ DWORD attr = 0;
++ WIN32_FIND_DATAW findDataW;
++
++ hFind = FindFirstFileW(name, &findDataW);
++ if (hFind != INVALID_HANDLE_VALUE)
++ {
++ attr = findDataW.dwFileAttributes;
++ if ((attr & FILE_ATTRIBUTE_REPARSE_POINT)
++ && (findDataW.dwReserved0 == IO_REPARSE_TAG_SYMLINK))
++ is_symlink = TRUE;
++ FindClose(hFind);
++ }
++ if (is_symlink)
++ {
++ h = CreateFileW(name, FILE_READ_ATTRIBUTES,
++ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
++ OPEN_EXISTING,
++ (attr & FILE_ATTRIBUTE_DIRECTORY)
++ ? FILE_FLAG_BACKUP_SEMANTICS : 0,
++ NULL);
++ if (h != INVALID_HANDLE_VALUE)
++ {
++ int fd;
++
++ fd = _open_osfhandle((intptr_t)h, _O_RDONLY);
++ n = _fstat(fd, stp);
++ _close(fd);
++ return n;
++ }
++ }
++ # endif
++ return _wstat(name, stp);
++ }
++ #endif
+
+ /*
+ * stat() can't handle a trailing '/' or '\', remove it first.
+***************
+*** 534,540 ****
+
+ if (wp != NULL)
+ {
+! n = _wstat(wp, (struct _stat *)stp);
+ vim_free(wp);
+ if (n >= 0)
+ return n;
+--- 626,632 ----
+
+ if (wp != NULL)
+ {
+! n = wstat_symlink_aware(wp, (struct _stat *)stp);
+ vim_free(wp);
+ if (n >= 0)
+ return n;
+***************
+*** 544,550 ****
+ }
+ }
+ #endif
+! return stat(buf, stp);
+ }
+
+ #if defined(FEAT_GUI_MSWIN) || defined(PROTO)
+--- 636,642 ----
+ }
+ }
+ #endif
+! return stat_symlink_aware(buf, stp);
+ }
+
+ #if defined(FEAT_GUI_MSWIN) || defined(PROTO)
+*** ../vim-7.4.038/src/os_win32.c 2013-08-30 17:29:10.000000000 +0200
+--- src/os_win32.c 2013-09-25 19:09:53.000000000 +0200
+***************
+*** 78,93 ****
+ # endif
+ #endif
+
+- /*
+- * Reparse Point
+- */
+- #ifndef FILE_ATTRIBUTE_REPARSE_POINT
+- # define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
+- #endif
+- #ifndef IO_REPARSE_TAG_SYMLINK
+- # define IO_REPARSE_TAG_SYMLINK 0xA000000C
+- #endif
+-
+ /* Record all output and all keyboard & mouse input */
+ /* #define MCH_WRITE_DUMP */
+
+--- 78,83 ----
+*** ../vim-7.4.038/src/os_win32.h 2013-07-21 17:53:13.000000000 +0200
+--- src/os_win32.h 2013-09-25 19:09:53.000000000 +0200
+***************
+*** 130,135 ****
+--- 130,148 ----
+ # define DFLT_MAXMEMTOT (5*1024) /* use up to 5 Mbyte for Vim */
+ #endif
+
++ /*
++ * Reparse Point
++ */
++ #ifndef FILE_ATTRIBUTE_REPARSE_POINT
++ # define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
++ #endif
++ #ifndef IO_REPARSE_TAG_MOUNT_POINT
++ # define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
++ #endif
++ #ifndef IO_REPARSE_TAG_SYMLINK
++ # define IO_REPARSE_TAG_SYMLINK 0xA000000C
++ #endif
++
+ #if defined(_MSC_VER) || defined(__BORLANDC__)
+ /* Support for __try / __except. All versions of MSVC and Borland C are
+ * expected to have this. Any other compilers that support it? */
+*** ../vim-7.4.038/src/version.c 2013-09-25 18:54:20.000000000 +0200
+--- src/version.c 2013-09-25 19:08:55.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 39,
+ /**/
+
+--
+ A cow comes flying over the battlements, lowing aggressively. The cow
+ lands on GALAHAD'S PAGE, squashing him completely.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.040 new/vim-7.4-patches/7.4.040
--- old/vim-7.4-patches/7.4.040 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.040 2013-09-25 21:01:37.000000000 +0200
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.040
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.040
+Problem: Valgrind error on exit when a script-local variable holds a
+ reference to the scope of another script.
+Solution: First clear all variables, then free the scopes. (ZyX)
+Files: src/eval.c
+
+
+*** ../vim-7.4.039/src/eval.c 2013-08-30 16:35:41.000000000 +0200
+--- src/eval.c 2013-09-25 20:28:15.000000000 +0200
+***************
+*** 915,926 ****
+ /* autoloaded script names */
+ ga_clear_strings(&ga_loaded);
+
+! /* script-local variables */
+ for (i = 1; i <= ga_scripts.ga_len; ++i)
+- {
+ vars_clear(&SCRIPT_VARS(i));
+ vim_free(SCRIPT_SV(i));
+- }
+ ga_clear(&ga_scripts);
+
+ /* unreferenced lists and dicts */
+--- 915,927 ----
+ /* autoloaded script names */
+ ga_clear_strings(&ga_loaded);
+
+! /* Script-local variables. First clear all the variables and in a second
+! * loop free the scriptvar_T, because a variable in one script might hold
+! * a reference to the whole scope of another script. */
+ for (i = 1; i <= ga_scripts.ga_len; ++i)
+ vars_clear(&SCRIPT_VARS(i));
++ for (i = 1; i <= ga_scripts.ga_len; ++i)
+ vim_free(SCRIPT_SV(i));
+ ga_clear(&ga_scripts);
+
+ /* unreferenced lists and dicts */
+*** ../vim-7.4.039/src/version.c 2013-09-25 19:13:32.000000000 +0200
+--- src/version.c 2013-09-25 20:30:06.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 40,
+ /**/
+
+--
+ A KNIGHT rides into shot and hacks him to the ground. He rides off.
+ We stay for a moment on the glade. A MIDDLE-AGED LADY in a C. & A.
+ twin-set emerges from the trees and looks in horror at the body of her
+ HUSBAND.
+MRS HISTORIAN: FRANK!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.041 new/vim-7.4-patches/7.4.041
--- old/vim-7.4-patches/7.4.041 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.041 2013-09-25 23:25:27.000000000 +0200
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.041
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.041 (after 7.4.034)
+Problem: Visual selection does not remain after being copied over. (Axel
+ Bender)
+Solution: Move when VIsual_active is reset. (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.4.040/src/ops.c 2013-09-22 15:23:38.000000000 +0200
+--- src/ops.c 2013-09-25 23:20:37.000000000 +0200
+***************
+*** 3808,3816 ****
+ FALSE /* stop after 1 paste */
+ #endif
+ );
+- #ifdef FEAT_VISUAL
+- VIsual_active = FALSE;
+- #endif
+
+ curbuf->b_op_end = curwin->w_cursor;
+ /* For "CTRL-O p" in Insert mode, put cursor after last char */
+--- 3808,3813 ----
+***************
+*** 3972,3977 ****
+--- 3969,3978 ----
+ if (regname == '=')
+ vim_free(y_array);
+
++ #ifdef FEAT_VISUAL
++ VIsual_active = FALSE;
++ #endif
++
+ /* If the cursor is past the end of the line put it at the end. */
+ adjust_cursor_eol();
+ }
+*** ../vim-7.4.040/src/version.c 2013-09-25 21:00:24.000000000 +0200
+--- src/version.c 2013-09-25 23:20:46.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 41,
+ /**/
+
+
+--
+press CTRL-ALT-DEL for more information
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.042 new/vim-7.4-patches/7.4.042
--- old/vim-7.4-patches/7.4.042 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.042 2013-09-29 13:39:45.000000000 +0200
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.042
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.042
+Problem: When using ":setlocal" for 'spell' and 'spellang' then :spelldump
+ doesn't work. (Dimitar Dimitrov)
+Solution: Copy the option variables to the new window used to show the dump.
+ (Christian Brabandt)
+Files: src/spell.c
+
+
+*** ../vim-7.4.041/src/spell.c 2013-09-25 18:54:20.000000000 +0200
+--- src/spell.c 2013-09-29 13:15:51.000000000 +0200
+***************
+*** 15569,15579 ****
+ ex_spelldump(eap)
+ exarg_T *eap;
+ {
+ if (no_spell_checking(curwin))
+ return;
+
+! /* Create a new empty buffer by splitting the window. */
+ do_cmdline_cmd((char_u *)"new");
+ if (!bufempty() || !buf_valid(curbuf))
+ return;
+
+--- 15569,15589 ----
+ ex_spelldump(eap)
+ exarg_T *eap;
+ {
++ char_u *spl;
++ long dummy;
++
+ if (no_spell_checking(curwin))
+ return;
++ get_option_value((char_u*)"spl", &dummy, &spl, OPT_LOCAL);
+
+! /* Create a new empty buffer in a new window. */
+ do_cmdline_cmd((char_u *)"new");
++
++ /* enable spelling locally in the new window */
++ set_option_value((char_u*)"spell", TRUE, (char_u*)"", OPT_LOCAL);
++ set_option_value((char_u*)"spl", dummy, spl, OPT_LOCAL);
++ vim_free(spl);
++
+ if (!bufempty() || !buf_valid(curbuf))
+ return;
+
+*** ../vim-7.4.041/src/version.c 2013-09-25 23:24:54.000000000 +0200
+--- src/version.c 2013-09-29 13:15:17.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 42,
+ /**/
+
+--
+Experience is what you get when you don't get what you want.
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.043 new/vim-7.4-patches/7.4.043
--- old/vim-7.4-patches/7.4.043 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.043 2013-09-29 16:28:14.000000000 +0200
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.043
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.043
+Problem: VMS can't handle long function names.
+Solution: Shorten may_req_ambiguous_character_width. (Samuel Ferencik)
+Files: src/main.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-7.4.042/src/main.c 2013-08-22 14:14:23.000000000 +0200
+--- src/main.c 2013-09-29 16:23:49.000000000 +0200
+***************
+*** 812,818 ****
+ starttermcap(); /* start termcap if not done by wait_return() */
+ TIME_MSG("start termcap");
+ #if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
+! may_req_ambiguous_character_width();
+ #endif
+
+ #ifdef FEAT_MOUSE
+--- 812,818 ----
+ starttermcap(); /* start termcap if not done by wait_return() */
+ TIME_MSG("start termcap");
+ #if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
+! may_req_ambiguous_char_width();
+ #endif
+
+ #ifdef FEAT_MOUSE
+*** ../vim-7.4.042/src/term.c 2013-07-04 22:29:28.000000000 +0200
+--- src/term.c 2013-09-29 16:27:12.000000000 +0200
+***************
+*** 3356,3362 ****
+ * it must be called immediately after entering termcap mode.
+ */
+ void
+! may_req_ambiguous_character_width()
+ {
+ if (u7_status == U7_GET
+ && cur_tmode == TMODE_RAW
+--- 3356,3362 ----
+ * it must be called immediately after entering termcap mode.
+ */
+ void
+! may_req_ambiguous_char_width()
+ {
+ if (u7_status == U7_GET
+ && cur_tmode == TMODE_RAW
+*** ../vim-7.4.042/src/proto/term.pro 2013-08-10 13:37:28.000000000 +0200
+--- src/proto/term.pro 2013-09-29 16:25:02.000000000 +0200
+***************
+*** 35,41 ****
+ void starttermcap __ARGS((void));
+ void stoptermcap __ARGS((void));
+ void may_req_termresponse __ARGS((void));
+! void may_req_ambiguous_character_width __ARGS((void));
+ int swapping_screen __ARGS((void));
+ void setmouse __ARGS((void));
+ int mouse_has __ARGS((int c));
+--- 35,41 ----
+ void starttermcap __ARGS((void));
+ void stoptermcap __ARGS((void));
+ void may_req_termresponse __ARGS((void));
+! void may_req_ambiguous_char_width __ARGS((void));
+ int swapping_screen __ARGS((void));
+ void setmouse __ARGS((void));
+ int mouse_has __ARGS((int c));
+*** ../vim-7.4.042/src/version.c 2013-09-29 13:38:25.000000000 +0200
+--- src/version.c 2013-09-29 16:25:16.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 43,
+ /**/
+
+--
+Back up my hard drive? I can't find the reverse switch!
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.044 new/vim-7.4-patches/7.4.044
--- old/vim-7.4-patches/7.4.044 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.044 2013-09-29 19:05:50.000000000 +0200
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.044
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.044 (after 7.4.039)
+Problem: Can't build with old MSVC. (Wang Shoulin)
+Solution: Define OPEN_OH_ARGTYPE instead of using intptr_t directly.
+Files: src/os_mswin.c
+
+
+*** ../vim-7.4.043/src/os_mswin.c 2013-09-25 19:13:32.000000000 +0200
+--- src/os_mswin.c 2013-09-26 20:37:38.000000000 +0200
+***************
+*** 498,503 ****
+--- 498,509 ----
+ }
+ }
+
++ #if (_MSC_VER >= 1300)
++ # define OPEN_OH_ARGTYPE intptr_t
++ #else
++ # define OPEN_OH_ARGTYPE long
++ #endif
++
+ static int
+ stat_symlink_aware(const char *name, struct stat *stp)
+ {
+***************
+*** 533,539 ****
+ {
+ int fd, n;
+
+! fd = _open_osfhandle((intptr_t)h, _O_RDONLY);
+ n = _fstat(fd, (struct _stat*)stp);
+ _close(fd);
+ return n;
+--- 539,545 ----
+ {
+ int fd, n;
+
+! fd = _open_osfhandle((OPEN_OH_ARGTYPE)h, _O_RDONLY);
+ n = _fstat(fd, (struct _stat*)stp);
+ _close(fd);
+ return n;
+***************
+*** 580,586 ****
+ {
+ int fd;
+
+! fd = _open_osfhandle((intptr_t)h, _O_RDONLY);
+ n = _fstat(fd, stp);
+ _close(fd);
+ return n;
+--- 586,592 ----
+ {
+ int fd;
+
+! fd = _open_osfhandle((OPEN_OH_ARGTYPE)h, _O_RDONLY);
+ n = _fstat(fd, stp);
+ _close(fd);
+ return n;
+*** ../vim-7.4.043/src/version.c 2013-09-29 16:27:42.000000000 +0200
+--- src/version.c 2013-09-29 18:27:58.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 44,
+ /**/
+
+--
+I'd like to meet the man who invented sex and see what he's working on now.
+
+ /// 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 ///
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vim-7.4-patches/7.4.045 new/vim-7.4-patches/7.4.045
--- old/vim-7.4-patches/7.4.045 1970-01-01 01:00:00.000000000 +0100
+++ new/vim-7.4-patches/7.4.045 2013-09-29 21:13:08.000000000 +0200
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.045
+Fcc: outbox
+From: Bram Moolenaar
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.045
+Problem: substitute() does not work properly when the pattern starts with
+ "\ze".
+Solution: Detect an empty match. (Christian Brabandt)
+Files: src/eval.c, src/testdir/test80.in, src/testdir/test80.ok
+
+
+*** ../vim-7.4.044/src/eval.c 2013-09-25 21:00:24.000000000 +0200
+--- src/eval.c 2013-09-29 21:03:22.000000000 +0200
+***************
+*** 24301,24306 ****
+--- 24301,24307 ----
+ garray_T ga;
+ char_u *ret;
+ char_u *save_cpo;
++ int zero_width;
+
+ /* Make 'cpoptions' empty, so that the 'l' flag doesn't work here */
+ save_cpo = p_cpo;
+***************
+*** 24339,24358 ****
+ (void)vim_regsub(®match, sub, (char_u *)ga.ga_data
+ + ga.ga_len + i, TRUE, TRUE, FALSE);
+ ga.ga_len += i + sublen - 1;
+! /* avoid getting stuck on a match with an empty string */
+! if (tail == regmatch.endp[0])
+ {
+! if (*tail == NUL)
+! break;
+ *((char_u *)ga.ga_data + ga.ga_len) = *tail++;
+ ++ga.ga_len;
+ }
+- else
+- {
+- tail = regmatch.endp[0];
+- if (*tail == NUL)
+- break;
+- }
+ if (!do_all)
+ break;
+ }
+--- 24340,24356 ----
+ (void)vim_regsub(®match, sub, (char_u *)ga.ga_data
+ + ga.ga_len + i, TRUE, TRUE, FALSE);
+ ga.ga_len += i + sublen - 1;
+! zero_width = (tail == regmatch.endp[0]
+! || regmatch.startp[0] == regmatch.endp[0]);
+! tail = regmatch.endp[0];
+! if (*tail == NUL)
+! break;
+! if (zero_width)
+ {
+! /* avoid getting stuck on a match with an empty string */
+ *((char_u *)ga.ga_data + ga.ga_len) = *tail++;
+ ++ga.ga_len;
+ }
+ if (!do_all)
+ break;
+ }
+*** ../vim-7.4.044/src/testdir/test80.in 2013-03-19 17:30:51.000000000 +0100
+--- src/testdir/test80.in 2013-09-29 20:59:00.000000000 +0200
+***************
+*** 142,147 ****
+--- 142,149 ----
+ :$put =\"\n\nTEST_7:\"
+ :$put =substitute('A
A', 'A.', '\=submatch(0)', '')
+ :$put =substitute(\"B\nB\", 'B.', '\=submatch(0)', '')
++ :$put =substitute('-bb', '\zeb', 'a', 'g')
++ :$put =substitute('-bb', '\ze', 'c', 'g')
+ /^TEST_8
+ ENDTEST
+
+*** ../vim-7.4.044/src/testdir/test80.ok 2013-03-19 17:31:45.000000000 +0100
+--- src/testdir/test80.ok 2013-09-29 20:59:35.000000000 +0200
+***************
+*** 103,108 ****
+--- 103,110 ----
+ A
A
+ B
+ B
++ -abab
++ c-cbcbc
+
+
+ TEST_8:
+*** ../vim-7.4.044/src/version.c 2013-09-29 19:05:17.000000000 +0200
+--- src/version.c 2013-09-29 21:04:50.000000000 +0200
+***************
+*** 740,741 ****
+--- 740,743 ----
+ { /* Add new patch number below this line */
++ /**/
++ 45,
+ /**/
+
+--
+Just think of all the things we haven't thought of yet.
+
+ /// 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 ///