diff --git a/7.4.001 b/7.4.001 new file mode 100644 index 0000000..5788972 --- /dev/null +++ b/7.4.001 @@ -0,0 +1,489 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.001 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.001 +Problem: Character classes such as [a-z] to not react to 'ignorecase'. + Breaks man page highlighting. (Mario Grgic) +Solution: Add separate items for classes that react to 'ignorecase'. Clean + up logic handling character classes. Add more tests. +Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok + + +*** ../vim-7.4.000/src/regexp_nfa.c 2013-08-01 18:27:51.000000000 +0200 +--- src/regexp_nfa.c 2013-08-14 11:49:50.000000000 +0200 +*************** +*** 29,34 **** +--- 29,37 ---- + # define NFA_REGEXP_DEBUG_LOG "nfa_regexp_debug.log" + #endif + ++ /* Added to NFA_ANY - NFA_NUPPER_IC to include a NL. */ ++ #define NFA_ADD_NL 31 ++ + enum + { + NFA_SPLIT = -1024, +*************** +*** 183,188 **** +--- 186,198 ---- + NFA_NLOWER, /* Match non-lowercase char */ + NFA_UPPER, /* Match uppercase char */ + NFA_NUPPER, /* Match non-uppercase char */ ++ NFA_LOWER_IC, /* Match [a-z] */ ++ NFA_NLOWER_IC, /* Match [^a-z] */ ++ NFA_UPPER_IC, /* Match [A-Z] */ ++ NFA_NUPPER_IC, /* Match [^A-Z] */ ++ ++ NFA_FIRST_NL = NFA_ANY + NFA_ADD_NL, ++ NFA_LAST_NL = NFA_NUPPER_IC + NFA_ADD_NL, + + NFA_CURSOR, /* Match cursor pos */ + NFA_LNUM, /* Match line number */ +*************** +*** 199,207 **** + NFA_MARK_LT, /* Match < mark */ + NFA_VISUAL, /* Match Visual area */ + +- NFA_FIRST_NL = NFA_ANY + ADD_NL, +- NFA_LAST_NL = NFA_NUPPER + ADD_NL, +- + /* Character classes [:alnum:] etc */ + NFA_CLASS_ALNUM, + NFA_CLASS_ALPHA, +--- 209,214 ---- +*************** +*** 578,583 **** +--- 585,592 ---- + * On failure, return 0 (=FAIL) + * Start points to the first char of the range, while end should point + * to the closing brace. ++ * Keep in mind that 'ignorecase' applies at execution time, thus [a-z] may ++ * need to be interpreted as [a-zA-Z]. + */ + static int + nfa_recognize_char_class(start, end, extra_newl) +*************** +*** 681,687 **** + return FAIL; + + if (newl == TRUE) +! extra_newl = ADD_NL; + + switch (config) + { +--- 690,696 ---- + return FAIL; + + if (newl == TRUE) +! extra_newl = NFA_ADD_NL; + + switch (config) + { +*************** +*** 710,722 **** + case CLASS_not | CLASS_az | CLASS_AZ: + return extra_newl + NFA_NALPHA; + case CLASS_az: +! return extra_newl + NFA_LOWER; + case CLASS_not | CLASS_az: +! return extra_newl + NFA_NLOWER; + case CLASS_AZ: +! return extra_newl + NFA_UPPER; + case CLASS_not | CLASS_AZ: +! return extra_newl + NFA_NUPPER; + } + return FAIL; + } +--- 719,731 ---- + case CLASS_not | CLASS_az | CLASS_AZ: + return extra_newl + NFA_NALPHA; + case CLASS_az: +! return extra_newl + NFA_LOWER_IC; + case CLASS_not | CLASS_az: +! return extra_newl + NFA_NLOWER_IC; + case CLASS_AZ: +! return extra_newl + NFA_UPPER_IC; + case CLASS_not | CLASS_AZ: +! return extra_newl + NFA_NUPPER_IC; + } + return FAIL; + } +*************** +*** 914,920 **** + break; + } + +! extra = ADD_NL; + + /* "\_[" is collection plus newline */ + if (c == '[') +--- 923,929 ---- + break; + } + +! extra = NFA_ADD_NL; + + /* "\_[" is collection plus newline */ + if (c == '[') +*************** +*** 970,976 **** + } + #endif + EMIT(nfa_classcodes[p - classchars]); +! if (extra == ADD_NL) + { + EMIT(NFA_NEWL); + EMIT(NFA_OR); +--- 979,985 ---- + } + #endif + EMIT(nfa_classcodes[p - classchars]); +! if (extra == NFA_ADD_NL) + { + EMIT(NFA_NEWL); + EMIT(NFA_OR); +*************** +*** 1240,1260 **** + { + /* + * Try to reverse engineer character classes. For example, +! * recognize that [0-9] stands for \d and [A-Za-z_] with \h, + * and perform the necessary substitutions in the NFA. + */ + result = nfa_recognize_char_class(regparse, endp, +! extra == ADD_NL); + if (result != FAIL) + { +! if (result >= NFA_DIGIT && result <= NFA_NUPPER) +! EMIT(result); +! else /* must be char class + newline */ + { +! EMIT(result - ADD_NL); + EMIT(NFA_NEWL); + EMIT(NFA_OR); + } + regparse = endp; + mb_ptr_adv(regparse); + return OK; +--- 1249,1269 ---- + { + /* + * Try to reverse engineer character classes. For example, +! * recognize that [0-9] stands for \d and [A-Za-z_] for \h, + * and perform the necessary substitutions in the NFA. + */ + result = nfa_recognize_char_class(regparse, endp, +! extra == NFA_ADD_NL); + if (result != FAIL) + { +! if (result >= NFA_FIRST_NL && result <= NFA_LAST_NL) + { +! EMIT(result - NFA_ADD_NL); + EMIT(NFA_NEWL); + EMIT(NFA_OR); + } ++ else ++ EMIT(result); + regparse = endp; + mb_ptr_adv(regparse); + return OK; +*************** +*** 1504,1510 **** + * collection, add an OR below. But not for negated + * range. */ + if (!negated) +! extra = ADD_NL; + } + else + { +--- 1513,1519 ---- + * collection, add an OR below. But not for negated + * range. */ + if (!negated) +! extra = NFA_ADD_NL; + } + else + { +*************** +*** 1537,1543 **** + EMIT(NFA_END_COLL); + + /* \_[] also matches \n but it's not negated */ +! if (extra == ADD_NL) + { + EMIT(reg_string ? NL : NFA_NEWL); + EMIT(NFA_OR); +--- 1546,1552 ---- + EMIT(NFA_END_COLL); + + /* \_[] also matches \n but it's not negated */ +! if (extra == NFA_ADD_NL) + { + EMIT(reg_string ? NL : NFA_NEWL); + EMIT(NFA_OR); +*************** +*** 2011,2017 **** + if (c >= NFA_FIRST_NL && c <= NFA_LAST_NL) + { + addnl = TRUE; +! c -= ADD_NL; + } + + STRCPY(code, ""); +--- 2020,2026 ---- + if (c >= NFA_FIRST_NL && c <= NFA_LAST_NL) + { + addnl = TRUE; +! c -= NFA_ADD_NL; + } + + STRCPY(code, ""); +*************** +*** 2217,2222 **** +--- 2226,2235 ---- + case NFA_NLOWER:STRCPY(code, "NFA_NLOWER"); break; + case NFA_UPPER: STRCPY(code, "NFA_UPPER"); break; + case NFA_NUPPER:STRCPY(code, "NFA_NUPPER"); break; ++ case NFA_LOWER_IC: STRCPY(code, "NFA_LOWER_IC"); break; ++ case NFA_NLOWER_IC: STRCPY(code, "NFA_NLOWER_IC"); break; ++ case NFA_UPPER_IC: STRCPY(code, "NFA_UPPER_IC"); break; ++ case NFA_NUPPER_IC: STRCPY(code, "NFA_NUPPER_IC"); break; + + default: + STRCPY(code, "CHAR(x)"); +*************** +*** 2687,2692 **** +--- 2700,2709 ---- + case NFA_NLOWER: + case NFA_UPPER: + case NFA_NUPPER: ++ case NFA_LOWER_IC: ++ case NFA_NLOWER_IC: ++ case NFA_UPPER_IC: ++ case NFA_NUPPER_IC: + /* possibly non-ascii */ + #ifdef FEAT_MBYTE + if (has_mbyte) +*************** +*** 3841,3846 **** +--- 3858,3867 ---- + case NFA_NLOWER: + case NFA_UPPER: + case NFA_NUPPER: ++ case NFA_LOWER_IC: ++ case NFA_NLOWER_IC: ++ case NFA_UPPER_IC: ++ case NFA_NUPPER_IC: + case NFA_START_COLL: + case NFA_START_NEG_COLL: + case NFA_NEWL: +*************** +*** 5872,5877 **** +--- 5893,5920 ---- + ADD_STATE_IF_MATCH(t->state); + break; + ++ case NFA_LOWER_IC: /* [a-z] */ ++ result = ri_lower(curc) || (ireg_ic && ri_upper(curc)); ++ ADD_STATE_IF_MATCH(t->state); ++ break; ++ ++ case NFA_NLOWER_IC: /* [^a-z] */ ++ result = curc != NUL ++ && !(ri_lower(curc) || (ireg_ic && ri_upper(curc))); ++ ADD_STATE_IF_MATCH(t->state); ++ break; ++ ++ case NFA_UPPER_IC: /* [A-Z] */ ++ result = ri_upper(curc) || (ireg_ic && ri_lower(curc)); ++ ADD_STATE_IF_MATCH(t->state); ++ break; ++ ++ case NFA_NUPPER_IC: /* ^[A-Z] */ ++ result = curc != NUL ++ && !(ri_upper(curc) || (ireg_ic && ri_lower(curc))); ++ ADD_STATE_IF_MATCH(t->state); ++ break; ++ + case NFA_BACKREF1: + case NFA_BACKREF2: + case NFA_BACKREF3: +*** ../vim-7.4.000/src/testdir/test64.in 2013-08-01 17:45:33.000000000 +0200 +--- src/testdir/test64.in 2013-08-14 11:50:11.000000000 +0200 +*************** +*** 289,303 **** + :call add(tl, [2, '.a\%$', " a\n "]) + :call add(tl, [2, '.a\%$', " a\n_a", "_a"]) + :" +! :"""" Test recognition of some character classes +! :call add(tl, [2, '[0-9]', '8', '8']) +! :call add(tl, [2, '[^0-9]', '8']) +! :call add(tl, [2, '[0-9a-fA-F]*', '0a7', '0a7']) +! :call add(tl, [2, '[^0-9A-Fa-f]\+', '0a7']) +! :call add(tl, [2, '[a-z_A-Z0-9]\+', 'aso_sfoij', 'aso_sfoij']) +! :call add(tl, [2, '[a-z]', 'a', 'a']) +! :call add(tl, [2, '[a-zA-Z]', 'a', 'a']) +! :call add(tl, [2, '[A-Z]', 'a']) + :call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa']) + :" + :"""" Tests for \z features +--- 289,317 ---- + :call add(tl, [2, '.a\%$', " a\n "]) + :call add(tl, [2, '.a\%$', " a\n_a", "_a"]) + :" +! :"""" Test recognition of character classes +! :call add(tl, [2, '[0-7]\+', 'x0123456789x', '01234567']) +! :call add(tl, [2, '[^0-7]\+', '0a;X+% 897', 'a;X+% 89']) +! :call add(tl, [2, '[0-9]\+', 'x0123456789x', '0123456789']) +! :call add(tl, [2, '[^0-9]\+', '0a;X+% 9', 'a;X+% ']) +! :call add(tl, [2, '[0-9a-fA-F]\+', 'x0189abcdefg', '0189abcdef']) +! :call add(tl, [2, '[^0-9A-Fa-f]\+', '0189g;X+% ab', 'g;X+% ']) +! :call add(tl, [2, '[a-z_A-Z0-9]\+', ';+aso_SfOij ', 'aso_SfOij']) +! :call add(tl, [2, '[^a-z_A-Z0-9]\+', 'aSo_;+% sfOij', ';+% ']) +! :call add(tl, [2, '[a-z_A-Z]\+', '0abyz_ABYZ;', 'abyz_ABYZ']) +! :call add(tl, [2, '[^a-z_A-Z]\+', 'abAB_09;+% yzYZ', '09;+% ']) +! :call add(tl, [2, '[a-z]\+', '0abcxyz1', 'abcxyz']) +! :call add(tl, [2, '[a-z]\+', 'AabxyzZ', 'abxyz']) +! :call add(tl, [2, '[^a-z]\+', 'a;X09+% x', ';X09+% ']) +! :call add(tl, [2, '[^a-z]\+', 'abX0;%yz', 'X0;%']) +! :call add(tl, [2, '[a-zA-Z]\+', '0abABxzXZ9', 'abABxzXZ']) +! :call add(tl, [2, '[^a-zA-Z]\+', 'ab09_;+ XZ', '09_;+ ']) +! :call add(tl, [2, '[A-Z]\+', 'aABXYZz', 'ABXYZ']) +! :call add(tl, [2, '[^A-Z]\+', 'ABx0;%YZ', 'x0;%']) +! :call add(tl, [2, '[a-z]\+\c', '0abxyzABXYZ;', 'abxyzABXYZ']) +! :call add(tl, [2, '[A-Z]\+\c', '0abABxzXZ9', 'abABxzXZ']) +! :call add(tl, [2, '\c[^a-z]\+', 'ab09_;+ XZ', '09_;+ ']) +! :call add(tl, [2, '\c[^A-Z]\+', 'ab09_;+ XZ', '09_;+ ']) + :call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa']) + :" + :"""" Tests for \z features +*** ../vim-7.4.000/src/testdir/test64.ok 2013-08-01 18:28:56.000000000 +0200 +--- src/testdir/test64.ok 2013-08-14 11:50:37.000000000 +0200 +*************** +*** 650,679 **** + OK 0 - .a\%$ + OK 1 - .a\%$ + OK 2 - .a\%$ +! OK 0 - [0-9] +! OK 1 - [0-9] +! OK 2 - [0-9] +! OK 0 - [^0-9] +! OK 1 - [^0-9] +! OK 2 - [^0-9] +! OK 0 - [0-9a-fA-F]* +! OK 1 - [0-9a-fA-F]* +! OK 2 - [0-9a-fA-F]* + OK 0 - [^0-9A-Fa-f]\+ + OK 1 - [^0-9A-Fa-f]\+ + OK 2 - [^0-9A-Fa-f]\+ + OK 0 - [a-z_A-Z0-9]\+ + OK 1 - [a-z_A-Z0-9]\+ + OK 2 - [a-z_A-Z0-9]\+ +! OK 0 - [a-z] +! OK 1 - [a-z] +! OK 2 - [a-z] +! OK 0 - [a-zA-Z] +! OK 1 - [a-zA-Z] +! OK 2 - [a-zA-Z] +! OK 0 - [A-Z] +! OK 1 - [A-Z] +! OK 2 - [A-Z] + OK 0 - \C[^A-Z]\+ + OK 1 - \C[^A-Z]\+ + OK 2 - \C[^A-Z]\+ +--- 650,721 ---- + OK 0 - .a\%$ + OK 1 - .a\%$ + OK 2 - .a\%$ +! OK 0 - [0-7]\+ +! OK 1 - [0-7]\+ +! OK 2 - [0-7]\+ +! OK 0 - [^0-7]\+ +! OK 1 - [^0-7]\+ +! OK 2 - [^0-7]\+ +! OK 0 - [0-9]\+ +! OK 1 - [0-9]\+ +! OK 2 - [0-9]\+ +! OK 0 - [^0-9]\+ +! OK 1 - [^0-9]\+ +! OK 2 - [^0-9]\+ +! OK 0 - [0-9a-fA-F]\+ +! OK 1 - [0-9a-fA-F]\+ +! OK 2 - [0-9a-fA-F]\+ + OK 0 - [^0-9A-Fa-f]\+ + OK 1 - [^0-9A-Fa-f]\+ + OK 2 - [^0-9A-Fa-f]\+ + OK 0 - [a-z_A-Z0-9]\+ + OK 1 - [a-z_A-Z0-9]\+ + OK 2 - [a-z_A-Z0-9]\+ +! OK 0 - [^a-z_A-Z0-9]\+ +! OK 1 - [^a-z_A-Z0-9]\+ +! OK 2 - [^a-z_A-Z0-9]\+ +! OK 0 - [a-z_A-Z]\+ +! OK 1 - [a-z_A-Z]\+ +! OK 2 - [a-z_A-Z]\+ +! OK 0 - [^a-z_A-Z]\+ +! OK 1 - [^a-z_A-Z]\+ +! OK 2 - [^a-z_A-Z]\+ +! OK 0 - [a-z]\+ +! OK 1 - [a-z]\+ +! OK 2 - [a-z]\+ +! OK 0 - [a-z]\+ +! OK 1 - [a-z]\+ +! OK 2 - [a-z]\+ +! OK 0 - [^a-z]\+ +! OK 1 - [^a-z]\+ +! OK 2 - [^a-z]\+ +! OK 0 - [^a-z]\+ +! OK 1 - [^a-z]\+ +! OK 2 - [^a-z]\+ +! OK 0 - [a-zA-Z]\+ +! OK 1 - [a-zA-Z]\+ +! OK 2 - [a-zA-Z]\+ +! OK 0 - [^a-zA-Z]\+ +! OK 1 - [^a-zA-Z]\+ +! OK 2 - [^a-zA-Z]\+ +! OK 0 - [A-Z]\+ +! OK 1 - [A-Z]\+ +! OK 2 - [A-Z]\+ +! OK 0 - [^A-Z]\+ +! OK 1 - [^A-Z]\+ +! OK 2 - [^A-Z]\+ +! OK 0 - [a-z]\+\c +! OK 1 - [a-z]\+\c +! OK 2 - [a-z]\+\c +! OK 0 - [A-Z]\+\c +! OK 1 - [A-Z]\+\c +! OK 2 - [A-Z]\+\c +! OK 0 - \c[^a-z]\+ +! OK 1 - \c[^a-z]\+ +! OK 2 - \c[^a-z]\+ +! OK 0 - \c[^A-Z]\+ +! OK 1 - \c[^A-Z]\+ +! OK 2 - \c[^A-Z]\+ + OK 0 - \C[^A-Z]\+ + OK 1 - \C[^A-Z]\+ + OK 2 - \C[^A-Z]\+ +*** ../vim-7.4.000/src/version.c 2013-08-10 13:29:20.000000000 +0200 +--- src/version.c 2013-08-14 11:54:57.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1, + /**/ + +-- +How many light bulbs does it take to change a person? + + /// 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 --git a/7.4.002 b/7.4.002 new file mode 100644 index 0000000..d92f4de --- /dev/null +++ b/7.4.002 @@ -0,0 +1,77 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.002 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4b.002 +Problem: Pattern with two alternative look-behind matches does not match. + (Amadeus Demarzi) +Solution: When comparing PIMs also compare their state ID to see if they are + different. +Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok + + +*** ../vim-7.4.001/src/regexp_nfa.c 2013-08-14 12:05:54.000000000 +0200 +--- src/regexp_nfa.c 2013-08-14 13:12:09.000000000 +0200 +*************** +*** 3782,3787 **** +--- 3782,3790 ---- + if (two_unused) + /* one is used and two is not: not equal */ + return FALSE; ++ /* compare the state id */ ++ if (one->state->id != two->state->id) ++ return FALSE; + /* compare the position */ + if (REG_MULTI) + return one->end.pos.lnum == two->end.pos.lnum +*** ../vim-7.4.001/src/testdir/test64.in 2013-08-14 12:05:54.000000000 +0200 +--- src/testdir/test64.in 2013-08-14 12:58:38.000000000 +0200 +*************** +*** 421,426 **** +--- 421,429 ---- + :call add(tl, [2, '\(foo\)\@<=\>', 'barfoo', '', 'foo']) + :call add(tl, [2, '\(foo\)\@<=.*', 'foobar', 'bar', 'foo']) + :" ++ :" complicated look-behind match ++ :call add(tl, [2, '\(r\@<=\|\w\@ + :call add(tl, [2, '\(a*\)\@>a', 'aaaa']) + :call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa']) +*** ../vim-7.4.001/src/testdir/test64.ok 2013-08-14 12:05:54.000000000 +0200 +--- src/testdir/test64.ok 2013-08-14 13:14:09.000000000 +0200 +*************** +*** 974,979 **** +--- 974,982 ---- + OK 0 - \(foo\)\@<=.* + OK 1 - \(foo\)\@<=.* + OK 2 - \(foo\)\@<=.* ++ OK 0 - \(r\@<=\|\w\@a + OK 1 - \(a*\)\@>a + OK 2 - \(a*\)\@>a +*** ../vim-7.4.001/src/version.c 2013-08-14 12:05:54.000000000 +0200 +--- src/version.c 2013-08-14 13:13:45.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 2, + /**/ + +-- +From "know your smileys": + :-)-O Smiling doctor with stethoscope + + /// 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 --git a/7.4.003 b/7.4.003 new file mode 100644 index 0000000..9aad3c8 --- /dev/null +++ b/7.4.003 @@ -0,0 +1,100 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.003 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.003 +Problem: Memory access error in Ruby syntax highlighting. (Christopher Chow) +Solution: Refresh stale pointer. (James McCoy) +Files: src/regexp_nfa.c + + +*** ../vim-7.4.002/src/regexp_nfa.c 2013-08-14 13:31:03.000000000 +0200 +--- src/regexp_nfa.c 2013-08-14 14:02:06.000000000 +0200 +*************** +*** 4120,4126 **** + sub = &subs->norm; + } + #ifdef FEAT_SYN_HL +! else if (state->c >= NFA_ZOPEN) + { + subidx = state->c - NFA_ZOPEN; + sub = &subs->synt; +--- 4120,4126 ---- + sub = &subs->norm; + } + #ifdef FEAT_SYN_HL +! else if (state->c >= NFA_ZOPEN && state->c <= NFA_ZOPEN9) + { + subidx = state->c - NFA_ZOPEN; + sub = &subs->synt; +*************** +*** 4189,4194 **** +--- 4189,4201 ---- + } + + subs = addstate(l, state->out, subs, pim, off); ++ /* "subs" may have changed, need to set "sub" again */ ++ #ifdef FEAT_SYN_HL ++ if (state->c >= NFA_ZOPEN && state->c <= NFA_ZOPEN9) ++ sub = &subs->synt; ++ else ++ #endif ++ sub = &subs->norm; + + if (save_in_use == -1) + { +*************** +*** 4237,4243 **** + sub = &subs->norm; + } + #ifdef FEAT_SYN_HL +! else if (state->c >= NFA_ZCLOSE) + { + subidx = state->c - NFA_ZCLOSE; + sub = &subs->synt; +--- 4244,4250 ---- + sub = &subs->norm; + } + #ifdef FEAT_SYN_HL +! else if (state->c >= NFA_ZCLOSE && state->c <= NFA_ZCLOSE9) + { + subidx = state->c - NFA_ZCLOSE; + sub = &subs->synt; +*************** +*** 4281,4286 **** +--- 4288,4300 ---- + } + + subs = addstate(l, state->out, subs, pim, off); ++ /* "subs" may have changed, need to set "sub" again */ ++ #ifdef FEAT_SYN_HL ++ if (state->c >= NFA_ZCLOSE && state->c <= NFA_ZCLOSE9) ++ sub = &subs->synt; ++ else ++ #endif ++ sub = &subs->norm; + + if (REG_MULTI) + sub->list.multi[subidx].end = save_lpos; +*** ../vim-7.4.002/src/version.c 2013-08-14 13:31:03.000000000 +0200 +--- src/version.c 2013-08-14 14:03:51.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 3, + /**/ + +-- +Where do you want to crash today? + + /// 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 --git a/7.4.004 b/7.4.004 new file mode 100644 index 0000000..f629d67 --- /dev/null +++ b/7.4.004 @@ -0,0 +1,232 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.004 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.004 +Problem: When closing a window fails ":bwipe" may hang. +Solution: Let win_close() return FAIL and break out of the loop. +Files: src/window.c, src/proto/window.pro, src/buffer.c + + +*** ../vim-7.4.003/src/window.c 2013-07-24 17:38:29.000000000 +0200 +--- src/window.c 2013-08-14 16:52:44.000000000 +0200 +*************** +*** 2172,2179 **** + * If "free_buf" is TRUE related buffer may be unloaded. + * + * Called by :quit, :close, :xit, :wq and findtag(). + */ +! void + win_close(win, free_buf) + win_T *win; + int free_buf; +--- 2172,2180 ---- + * If "free_buf" is TRUE related buffer may be unloaded. + * + * Called by :quit, :close, :xit, :wq and findtag(). ++ * Returns FAIL when the window was not closed. + */ +! int + win_close(win, free_buf) + win_T *win; + int free_buf; +*************** +*** 2190,2210 **** + if (last_window()) + { + EMSG(_("E444: Cannot close last window")); +! return; + } + + #ifdef FEAT_AUTOCMD + if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing)) +! return; /* window is already being closed */ + if (win == aucmd_win) + { + EMSG(_("E813: Cannot close autocmd window")); +! return; + } + if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window()) + { + EMSG(_("E814: Cannot close window, only autocmd window would remain")); +! return; + } + #endif + +--- 2191,2211 ---- + if (last_window()) + { + EMSG(_("E444: Cannot close last window")); +! return FAIL; + } + + #ifdef FEAT_AUTOCMD + if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing)) +! return FAIL; /* window is already being closed */ + if (win == aucmd_win) + { + EMSG(_("E813: Cannot close autocmd window")); +! return FAIL; + } + if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window()) + { + EMSG(_("E814: Cannot close window, only autocmd window would remain")); +! return FAIL; + } + #endif + +*************** +*** 2212,2218 **** + * and then close the window and the tab page to avoid that curwin and + * curtab are invalid while we are freeing memory. */ + if (close_last_window_tabpage(win, free_buf, prev_curtab)) +! return; + + /* When closing the help window, try restoring a snapshot after closing + * the window. Otherwise clear the snapshot, it's now invalid. */ +--- 2213,2219 ---- + * and then close the window and the tab page to avoid that curwin and + * curtab are invalid while we are freeing memory. */ + if (close_last_window_tabpage(win, free_buf, prev_curtab)) +! return FAIL; + + /* When closing the help window, try restoring a snapshot after closing + * the window. Otherwise clear the snapshot, it's now invalid. */ +*************** +*** 2240,2261 **** + win->w_closing = TRUE; + apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf); + if (!win_valid(win)) +! return; + win->w_closing = FALSE; + if (last_window()) +! return; + } + win->w_closing = TRUE; + apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf); + if (!win_valid(win)) +! return; + win->w_closing = FALSE; + if (last_window()) +! return; + # ifdef FEAT_EVAL + /* autocmds may abort script processing */ + if (aborting()) +! return; + # endif + } + #endif +--- 2241,2262 ---- + win->w_closing = TRUE; + apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf); + if (!win_valid(win)) +! return FAIL; + win->w_closing = FALSE; + if (last_window()) +! return FAIL; + } + win->w_closing = TRUE; + apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf); + if (!win_valid(win)) +! return FAIL; + win->w_closing = FALSE; + if (last_window()) +! return FAIL; + # ifdef FEAT_EVAL + /* autocmds may abort script processing */ + if (aborting()) +! return FAIL; + # endif + } + #endif +*************** +*** 2303,2309 **** + * other window or moved to another tab page. */ + else if (!win_valid(win) || last_window() || curtab != prev_curtab + || close_last_window_tabpage(win, free_buf, prev_curtab)) +! return; + + /* Free the memory used for the window and get the window that received + * the screen space. */ +--- 2304,2310 ---- + * other window or moved to another tab page. */ + else if (!win_valid(win) || last_window() || curtab != prev_curtab + || close_last_window_tabpage(win, free_buf, prev_curtab)) +! return FAIL; + + /* Free the memory used for the window and get the window that received + * the screen space. */ +*************** +*** 2383,2388 **** +--- 2384,2390 ---- + #endif + + redraw_all_later(NOT_VALID); ++ return OK; + } + + /* +*** ../vim-7.4.003/src/proto/window.pro 2013-08-10 13:37:30.000000000 +0200 +--- src/proto/window.pro 2013-08-14 16:52:50.000000000 +0200 +*************** +*** 9,15 **** + void win_equal __ARGS((win_T *next_curwin, int current, int dir)); + void close_windows __ARGS((buf_T *buf, int keep_curwin)); + int one_window __ARGS((void)); +! void win_close __ARGS((win_T *win, int free_buf)); + void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp)); + void win_free_all __ARGS((void)); + win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); +--- 9,15 ---- + void win_equal __ARGS((win_T *next_curwin, int current, int dir)); + void close_windows __ARGS((buf_T *buf, int keep_curwin)); + int one_window __ARGS((void)); +! int win_close __ARGS((win_T *win, int free_buf)); + void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp)); + void win_free_all __ARGS((void)); + win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); +*** ../vim-7.4.003/src/buffer.c 2013-07-17 16:39:00.000000000 +0200 +--- src/buffer.c 2013-08-14 16:54:34.000000000 +0200 +*************** +*** 1186,1192 **** + && !(curwin->w_closing || curwin->w_buffer->b_closing) + # endif + && (firstwin != lastwin || first_tabpage->tp_next != NULL)) +! win_close(curwin, FALSE); + #endif + + /* +--- 1186,1195 ---- + && !(curwin->w_closing || curwin->w_buffer->b_closing) + # endif + && (firstwin != lastwin || first_tabpage->tp_next != NULL)) +! { +! if (win_close(curwin, FALSE) == FAIL) +! break; +! } + #endif + + /* +*** ../vim-7.4.003/src/version.c 2013-08-14 14:18:37.000000000 +0200 +--- src/version.c 2013-08-14 17:10:23.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 4, + /**/ + +-- +From "know your smileys": + *<|:-) Santa Claus (Ho Ho Ho) + + /// 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 --git a/7.4.005 b/7.4.005 new file mode 100644 index 0000000..f85d1f0 --- /dev/null +++ b/7.4.005 @@ -0,0 +1,48 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.005 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.005 +Problem: Using "vaB" while 'virtualedit' is set selects the wrong area. + (Dimitar Dimitrov) +Solution: Reset coladd when finding a match. +Files: src/search.c + + +*** ../vim-7.4.004/src/search.c 2013-07-17 19:20:47.000000000 +0200 +--- src/search.c 2013-08-14 17:32:38.000000000 +0200 +*************** +*** 1760,1765 **** +--- 1760,1768 ---- + #endif + + pos = curwin->w_cursor; ++ #ifdef FEAT_VIRTUALEDIT ++ pos.coladd = 0; ++ #endif + linep = ml_get(pos.lnum); + + cpo_match = (vim_strchr(p_cpo, CPO_MATCH) != NULL); +*** ../vim-7.4.004/src/version.c 2013-08-14 17:11:14.000000000 +0200 +--- src/version.c 2013-08-14 17:38:05.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 5, + /**/ + +-- +You can't have everything. Where would you put it? + -- Steven Wright + + /// 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 --git a/7.4.006 b/7.4.006 new file mode 100644 index 0000000..55d3802 --- /dev/null +++ b/7.4.006 @@ -0,0 +1,66 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.006 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.006 +Problem: mkdir("foo/bar/", "p") gives an error message. (David Barnett) +Solution: Remove the trailing slash. (lcd) +Files: src/eval.c + + +*** ../vim-7.4.005/src/eval.c 2013-07-05 18:23:42.000000000 +0200 +--- src/eval.c 2013-08-22 12:00:28.000000000 +0200 +*************** +*** 14292,14297 **** +--- 14292,14301 ---- + return; + + dir = get_tv_string_buf(&argvars[0], buf); ++ if (*gettail(dir) == NUL) ++ /* remove trailing slashes */ ++ *gettail_sep(dir) = NUL; ++ + if (argvars[1].v_type != VAR_UNKNOWN) + { + if (argvars[2].v_type != VAR_UNKNOWN) +*************** +*** 14299,14305 **** + if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0) + mkdir_recurse(dir, prot); + } +! rettv->vval.v_number = prot != -1 ? vim_mkdir_emsg(dir, prot) : 0; + } + #endif + +--- 14303,14309 ---- + if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0) + mkdir_recurse(dir, prot); + } +! rettv->vval.v_number = prot == -1 ? FAIL : vim_mkdir_emsg(dir, prot); + } + #endif + +*** ../vim-7.4.005/src/version.c 2013-08-14 17:45:25.000000000 +0200 +--- src/version.c 2013-08-22 12:02:46.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 6, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +97. Your mother tells you to remember something, and you look for + a File/Save command. + + /// 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 --git a/7.4.007 b/7.4.007 new file mode 100644 index 0000000..5495ffb --- /dev/null +++ b/7.4.007 @@ -0,0 +1,95 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.007 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.007 +Problem: Creating a preview window on startup leaves the screen layout in a + messed up state. (Marius Gedminas) +Solution: Don't change firstwin. (Christian Brabandt) +Files: src/main.c + + +*** ../vim-7.4.006/src/main.c 2013-07-03 12:36:49.000000000 +0200 +--- src/main.c 2013-08-22 14:02:39.000000000 +0200 +*************** +*** 2727,2732 **** +--- 2727,2733 ---- + int arg_idx; /* index in argument list */ + int i; + int advance = TRUE; ++ win_T *win; + + # ifdef FEAT_AUTOCMD + /* +*************** +*** 2816,2839 **** + # ifdef FEAT_AUTOCMD + --autocmd_no_enter; + # endif + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) +! /* +! * Avoid making a preview window the current window. +! */ +! if (firstwin->w_p_pvw) + { +! win_T *win; +! +! for (win = firstwin; win != NULL; win = win->w_next) +! if (!win->w_p_pvw) +! { +! firstwin = win; +! break; +! } + } + #endif +! /* make the first window the current window */ +! win_enter(firstwin, FALSE); + + # ifdef FEAT_AUTOCMD + --autocmd_no_leave; +--- 2817,2838 ---- + # ifdef FEAT_AUTOCMD + --autocmd_no_enter; + # endif ++ ++ /* make the first window the current window */ ++ win = firstwin; + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) +! /* Avoid making a preview window the current window. */ +! while (win->w_p_pvw) + { +! win = win->w_next; +! if (win == NULL) +! { +! win = firstwin; +! break; +! } + } + #endif +! win_enter(win, FALSE); + + # ifdef FEAT_AUTOCMD + --autocmd_no_leave; +*** ../vim-7.4.006/src/version.c 2013-08-22 12:06:50.000000000 +0200 +--- src/version.c 2013-08-22 14:04:11.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 7, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +105. When someone asks you for your address, you tell them your URL. + + /// 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 --git a/7.4.008 b/7.4.008 new file mode 100644 index 0000000..6abd493 --- /dev/null +++ b/7.4.008 @@ -0,0 +1,71 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.008 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.008 +Problem: New regexp engine can't be interrupted. +Solution: Check for CTRL-C pressed. (Yasuhiro Matsumoto) +Files: src/regexp_nfa.c, src/regexp.c + + +*** ../vim-7.4.007/src/regexp_nfa.c 2013-08-14 14:18:37.000000000 +0200 +--- src/regexp_nfa.c 2013-08-25 16:55:56.000000000 +0200 +*************** +*** 5089,5094 **** +--- 5089,5100 ---- + return FALSE; + } + #endif ++ /* Some patterns may take a long time to match, especially when using ++ * recursive_regmatch(). Allow interrupting them with CTRL-C. */ ++ fast_breakcheck(); ++ if (got_int) ++ return FALSE; ++ + nfa_match = FALSE; + + /* Allocate memory for the lists of nodes. */ +*** ../vim-7.4.007/src/regexp.c 2013-08-01 18:31:30.000000000 +0200 +--- src/regexp.c 2013-08-25 16:57:35.000000000 +0200 +*************** +*** 4311,4318 **** + */ + for (;;) + { +! /* Some patterns may cause a long time to match, even though they are not +! * illegal. E.g., "\([a-z]\+\)\+Q". Allow breaking them with CTRL-C. */ + fast_breakcheck(); + + #ifdef DEBUG +--- 4311,4318 ---- + */ + for (;;) + { +! /* Some patterns may take a long time to match, e.g., "\([a-z]\+\)\+Q". +! * Allow interrupting them with CTRL-C. */ + fast_breakcheck(); + + #ifdef DEBUG +*** ../vim-7.4.007/src/version.c 2013-08-22 14:14:23.000000000 +0200 +--- src/version.c 2013-08-25 16:57:51.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 8, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +124. You begin conversations with, "Who is your internet service provider?" + + /// 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 --git a/7.4.009 b/7.4.009 new file mode 100644 index 0000000..f5e5fa6 --- /dev/null +++ b/7.4.009 @@ -0,0 +1,64 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.009 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.009 +Problem: When a file was not decrypted (yet), writing it may destroy the + contents. +Solution: Mark the file as readonly until decryption was done. (Christian + Brabandt) +Files: src/fileio.c + + +*** ../vim-7.4.008/src/fileio.c 2013-08-05 21:58:03.000000000 +0200 +--- src/fileio.c 2013-08-25 17:45:27.000000000 +0200 +*************** +*** 2926,2934 **** +--- 2926,2939 ---- + int *did_ask; /* flag: whether already asked for key */ + { + int method = crypt_method_from_magic((char *)ptr, *sizep); ++ int b_p_ro = curbuf->b_p_ro; + + if (method >= 0) + { ++ /* Mark the buffer as read-only until the decryption has taken place. ++ * Avoids accidentally overwriting the file with garbage. */ ++ curbuf->b_p_ro = TRUE; ++ + set_crypt_method(curbuf, method); + if (method > 0) + (void)blowfish_self_test(); +*************** +*** 2977,2982 **** +--- 2982,2989 ---- + *sizep -= CRYPT_MAGIC_LEN + salt_len + seed_len; + mch_memmove(ptr, ptr + CRYPT_MAGIC_LEN + salt_len + seed_len, + (size_t)*sizep); ++ /* Restore the read-only flag. */ ++ curbuf->b_p_ro = b_p_ro; + } + } + /* When starting to edit a new file which does not have encryption, clear +*** ../vim-7.4.008/src/version.c 2013-08-25 17:01:36.000000000 +0200 +--- src/version.c 2013-08-25 17:44:30.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 9, + /**/ + +-- +I have a watch cat! Just break in and she'll watch. + + /// 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 --git a/7.4.010 b/7.4.010 new file mode 100644 index 0000000..fee6ba5 --- /dev/null +++ b/7.4.010 @@ -0,0 +1,79 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.010 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.010 (after 7.4.006) +Problem: Crash with invalid argument to mkdir(). +Solution: Check for empty string. (lcd47) +Files: src/eval.c + + +*** ../vim-7.4.009/src/eval.c 2013-08-22 12:06:50.000000000 +0200 +--- src/eval.c 2013-08-30 15:47:47.000000000 +0200 +*************** +*** 14292,14309 **** + return; + + dir = get_tv_string_buf(&argvars[0], buf); +! if (*gettail(dir) == NUL) +! /* remove trailing slashes */ +! *gettail_sep(dir) = NUL; +! +! if (argvars[1].v_type != VAR_UNKNOWN) + { +! if (argvars[2].v_type != VAR_UNKNOWN) +! prot = get_tv_number_chk(&argvars[2], NULL); +! if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0) +! mkdir_recurse(dir, prot); + } +- rettv->vval.v_number = prot == -1 ? FAIL : vim_mkdir_emsg(dir, prot); + } + #endif + +--- 14292,14314 ---- + return; + + dir = get_tv_string_buf(&argvars[0], buf); +! if (*dir == NUL) +! rettv->vval.v_number = FAIL; +! else + { +! if (*gettail(dir) == NUL) +! /* remove trailing slashes */ +! *gettail_sep(dir) = NUL; +! +! if (argvars[1].v_type != VAR_UNKNOWN) +! { +! if (argvars[2].v_type != VAR_UNKNOWN) +! prot = get_tv_number_chk(&argvars[2], NULL); +! if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0) +! mkdir_recurse(dir, prot); +! } +! rettv->vval.v_number = prot == -1 ? FAIL : vim_mkdir_emsg(dir, prot); + } + } + #endif + +*** ../vim-7.4.009/src/version.c 2013-08-25 17:46:05.000000000 +0200 +--- src/version.c 2013-08-30 15:48:37.000000000 +0200 +*************** +*** 729,730 **** +--- 729,732 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 10, + /**/ + +-- +I wish there was a knob on the TV to turn up the intelligence. +There's a knob called "brightness", but it doesn't seem to work. + + /// 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 --git a/7.4.011 b/7.4.011 new file mode 100644 index 0000000..efff82c --- /dev/null +++ b/7.4.011 @@ -0,0 +1,100 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.011 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.011 +Problem: Cannot find out if "acl" and "xpm" features are supported. +Solution: Add "acl" and "xpm" to the list of features. (Ken Takata) +Files: src/eval.c, src/version.c + + +*** ../vim-7.4.010/src/eval.c 2013-08-30 16:00:04.000000000 +0200 +--- src/eval.c 2013-08-30 16:34:12.000000000 +0200 +*************** +*** 12135,12140 **** +--- 12135,12143 ---- + #ifndef CASE_INSENSITIVE_FILENAME + "fname_case", + #endif ++ #ifdef HAVE_ACL ++ "acl", ++ #endif + #ifdef FEAT_ARABIC + "arabic", + #endif +*************** +*** 12538,12544 **** + "xfontset", + #endif + #ifdef FEAT_XPM_W32 +! "xpm_w32", + #endif + #ifdef USE_XSMP + "xsmp", +--- 12541,12552 ---- + "xfontset", + #endif + #ifdef FEAT_XPM_W32 +! "xpm", +! "xpm_w32", /* for backward compatibility */ +! #else +! # if defined(HAVE_XPM) +! "xpm", +! # endif + #endif + #ifdef USE_XSMP + "xsmp", +*** ../vim-7.4.010/src/version.c 2013-08-30 16:00:04.000000000 +0200 +--- src/version.c 2013-08-30 16:34:37.000000000 +0200 +*************** +*** 60,65 **** +--- 60,70 ---- + + static char *(features[]) = + { ++ #ifdef HAVE_ACL ++ "+acl", ++ #else ++ "-acl", ++ #endif + #ifdef AMIGA /* only for Amiga systems */ + # ifdef FEAT_ARP + "+ARP", +*************** +*** 721,726 **** +--- 726,737 ---- + # else + "-xpm_w32", + # endif ++ #else ++ # ifdef HAVE_XPM ++ "+xpm", ++ # else ++ "-xpm", ++ # endif + #endif + NULL + }; +*** ../vim-7.4.010/src/version.c 2013-08-30 16:00:04.000000000 +0200 +--- src/version.c 2013-08-30 16:34:37.000000000 +0200 +*************** +*** 729,730 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 11, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +141. You'd rather go to http://www.weather.com/ than look out your window. + + /// 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 --git a/7.4.012 b/7.4.012 new file mode 100644 index 0000000..f831442 --- /dev/null +++ b/7.4.012 @@ -0,0 +1,202 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.012 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.012 +Problem: MS-Windows: resolving shortcut does not work properly with + multi-byte characters. +Solution: Use wide system functions. (Ken Takata) +Files: src/os_mswin.c + + +*** ../vim-7.4.011/src/os_mswin.c 2013-06-16 16:41:11.000000000 +0200 +--- src/os_mswin.c 2013-08-30 16:43:23.000000000 +0200 +*************** +*** 1761,1769 **** + IPersistFile *ppf = NULL; + OLECHAR wsz[MAX_PATH]; + WIN32_FIND_DATA ffd; // we get those free of charge +! TCHAR buf[MAX_PATH]; // could have simply reused 'wsz'... + char_u *rfname = NULL; + int len; + + /* Check if the file name ends in ".lnk". Avoid calling + * CoCreateInstance(), it's quite slow. */ +--- 1761,1773 ---- + IPersistFile *ppf = NULL; + OLECHAR wsz[MAX_PATH]; + WIN32_FIND_DATA ffd; // we get those free of charge +! CHAR buf[MAX_PATH]; // could have simply reused 'wsz'... + char_u *rfname = NULL; + int len; ++ # ifdef FEAT_MBYTE ++ IShellLinkW *pslw = NULL; ++ WIN32_FIND_DATAW ffdw; // we get those free of charge ++ # endif + + /* Check if the file name ends in ".lnk". Avoid calling + * CoCreateInstance(), it's quite slow. */ +*************** +*** 1775,1792 **** + + CoInitialize(NULL); + + // create a link manager object and request its interface + hr = CoCreateInstance( + &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, + &IID_IShellLink, (void**)&psl); + if (hr != S_OK) +! goto shortcut_error; + + // Get a pointer to the IPersistFile interface. + hr = psl->lpVtbl->QueryInterface( + psl, &IID_IPersistFile, (void**)&ppf); + if (hr != S_OK) +! goto shortcut_error; + + // full path string must be in Unicode. + MultiByteToWideChar(CP_ACP, 0, fname, -1, wsz, MAX_PATH); +--- 1779,1840 ---- + + CoInitialize(NULL); + ++ # ifdef FEAT_MBYTE ++ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ++ { ++ // create a link manager object and request its interface ++ hr = CoCreateInstance( ++ &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, ++ &IID_IShellLinkW, (void**)&pslw); ++ if (hr == S_OK) ++ { ++ WCHAR *p = enc_to_utf16(fname, NULL); ++ ++ if (p != NULL) ++ { ++ // Get a pointer to the IPersistFile interface. ++ hr = pslw->lpVtbl->QueryInterface( ++ pslw, &IID_IPersistFile, (void**)&ppf); ++ if (hr != S_OK) ++ goto shortcut_errorw; ++ ++ // "load" the name and resolve the link ++ hr = ppf->lpVtbl->Load(ppf, p, STGM_READ); ++ if (hr != S_OK) ++ goto shortcut_errorw; ++ # if 0 // This makes Vim wait a long time if the target does not exist. ++ hr = pslw->lpVtbl->Resolve(pslw, NULL, SLR_NO_UI); ++ if (hr != S_OK) ++ goto shortcut_errorw; ++ # endif ++ ++ // Get the path to the link target. ++ ZeroMemory(wsz, MAX_PATH * sizeof(WCHAR)); ++ hr = pslw->lpVtbl->GetPath(pslw, wsz, MAX_PATH, &ffdw, 0); ++ if (hr == S_OK && wsz[0] != NUL) ++ rfname = utf16_to_enc(wsz, NULL); ++ ++ shortcut_errorw: ++ vim_free(p); ++ if (hr == S_OK) ++ goto shortcut_end; ++ } ++ } ++ /* Retry with non-wide function (for Windows 98). */ ++ } ++ # endif + // create a link manager object and request its interface + hr = CoCreateInstance( + &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, + &IID_IShellLink, (void**)&psl); + if (hr != S_OK) +! goto shortcut_end; + + // Get a pointer to the IPersistFile interface. + hr = psl->lpVtbl->QueryInterface( + psl, &IID_IPersistFile, (void**)&ppf); + if (hr != S_OK) +! goto shortcut_end; + + // full path string must be in Unicode. + MultiByteToWideChar(CP_ACP, 0, fname, -1, wsz, MAX_PATH); +*************** +*** 1794,1805 **** + // "load" the name and resolve the link + hr = ppf->lpVtbl->Load(ppf, wsz, STGM_READ); + if (hr != S_OK) +! goto shortcut_error; +! #if 0 // This makes Vim wait a long time if the target doesn't exist. + hr = psl->lpVtbl->Resolve(psl, NULL, SLR_NO_UI); + if (hr != S_OK) +! goto shortcut_error; +! #endif + + // Get the path to the link target. + ZeroMemory(buf, MAX_PATH); +--- 1842,1853 ---- + // "load" the name and resolve the link + hr = ppf->lpVtbl->Load(ppf, wsz, STGM_READ); + if (hr != S_OK) +! goto shortcut_end; +! # if 0 // This makes Vim wait a long time if the target doesn't exist. + hr = psl->lpVtbl->Resolve(psl, NULL, SLR_NO_UI); + if (hr != S_OK) +! goto shortcut_end; +! # endif + + // Get the path to the link target. + ZeroMemory(buf, MAX_PATH); +*************** +*** 1807,1818 **** + if (hr == S_OK && buf[0] != NUL) + rfname = vim_strsave(buf); + +! shortcut_error: + // Release all interface pointers (both belong to the same object) + if (ppf != NULL) + ppf->lpVtbl->Release(ppf); + if (psl != NULL) + psl->lpVtbl->Release(psl); + + CoUninitialize(); + return rfname; +--- 1855,1870 ---- + if (hr == S_OK && buf[0] != NUL) + rfname = vim_strsave(buf); + +! shortcut_end: + // Release all interface pointers (both belong to the same object) + if (ppf != NULL) + ppf->lpVtbl->Release(ppf); + if (psl != NULL) + psl->lpVtbl->Release(psl); ++ # ifdef FEAT_MBYTE ++ if (pslw != NULL) ++ pslw->lpVtbl->Release(pslw); ++ # endif + + CoUninitialize(); + return rfname; +*** ../vim-7.4.011/src/version.c 2013-08-30 16:35:41.000000000 +0200 +--- src/version.c 2013-08-30 16:39:40.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 12, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +142. You dream about creating the world's greatest web site. + + /// 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 --git a/7.4.013 b/7.4.013 new file mode 100644 index 0000000..dcbe0fb --- /dev/null +++ b/7.4.013 @@ -0,0 +1,99 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.013 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.013 +Problem: File name buffer too small for utf-8. +Solution: Use character count instead of byte count. (Ken Takata) +Files: src/os_mswin.c + + +*** ../vim-7.4.012/src/os_mswin.c 2013-08-30 16:44:15.000000000 +0200 +--- src/os_mswin.c 2013-08-30 16:47:54.000000000 +0200 +*************** +*** 456,462 **** +--- 456,469 ---- + int + mch_isFullName(char_u *fname) + { ++ #ifdef FEAT_MBYTE ++ /* WinNT and later can use _MAX_PATH wide characters for a pathname, which ++ * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is ++ * UTF-8. */ ++ char szName[_MAX_PATH * 3 + 1]; ++ #else + char szName[_MAX_PATH + 1]; ++ #endif + + /* A name like "d:/foo" and "//server/share" is absolute */ + if ((fname[0] && fname[1] == ':' && (fname[2] == '/' || fname[2] == '\\')) +*************** +*** 464,470 **** + return TRUE; + + /* A name that can't be made absolute probably isn't absolute. */ +! if (mch_FullName(fname, szName, _MAX_PATH, FALSE) == FAIL) + return FALSE; + + return pathcmp(fname, szName, -1) == 0; +--- 471,477 ---- + return TRUE; + + /* A name that can't be made absolute probably isn't absolute. */ +! if (mch_FullName(fname, szName, sizeof(szName) - 1, FALSE) == FAIL) + return FALSE; + + return pathcmp(fname, szName, -1) == 0; +*************** +*** 498,507 **** + int + vim_stat(const char *name, struct stat *stp) + { + char buf[_MAX_PATH + 1]; + char *p; + +! vim_strncpy((char_u *)buf, (char_u *)name, _MAX_PATH); + p = buf + strlen(buf); + if (p > buf) + mb_ptr_back(buf, p); +--- 505,521 ---- + int + vim_stat(const char *name, struct stat *stp) + { ++ #ifdef FEAT_MBYTE ++ /* WinNT and later can use _MAX_PATH wide characters for a pathname, which ++ * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is ++ * UTF-8. */ ++ char buf[_MAX_PATH * 3 + 1]; ++ #else + char buf[_MAX_PATH + 1]; ++ #endif + char *p; + +! vim_strncpy((char_u *)buf, (char_u *)name, sizeof(buf) - 1); + p = buf + strlen(buf); + if (p > buf) + mb_ptr_back(buf, p); +*** ../vim-7.4.012/src/version.c 2013-08-30 16:44:15.000000000 +0200 +--- src/version.c 2013-08-30 16:47:36.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 13, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +143. You dream in pallettes of 216 websafe colors. + + /// 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 --git a/7.4.014 b/7.4.014 new file mode 100644 index 0000000..f655433 --- /dev/null +++ b/7.4.014 @@ -0,0 +1,102 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.014 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.014 +Problem: MS-Windows: check for writing to device does not work. +Solution: Fix #ifdefs. (Ken Takata) +Files: src/fileio.c + + +*** ../vim-7.4.013/src/fileio.c 2013-08-25 17:46:05.000000000 +0200 +--- src/fileio.c 2013-08-30 16:56:46.000000000 +0200 +*************** +*** 428,440 **** + } + } + +- #ifdef UNIX +- /* +- * On Unix it is possible to read a directory, so we have to +- * check for it before the mch_open(). +- */ + if (!read_stdin && !read_buffer) + { + perm = mch_getperm(fname); + if (perm >= 0 && !S_ISREG(perm) /* not a regular file ... */ + # ifdef S_ISFIFO +--- 428,440 ---- + } + } + + if (!read_stdin && !read_buffer) + { ++ #ifdef UNIX ++ /* ++ * On Unix it is possible to read a directory, so we have to ++ * check for it before the mch_open(). ++ */ + perm = mch_getperm(fname); + if (perm >= 0 && !S_ISREG(perm) /* not a regular file ... */ + # ifdef S_ISFIFO +*************** +*** 457,464 **** + msg_scroll = msg_save; + return FAIL; + } +! +! # if defined(MSDOS) || defined(MSWIN) || defined(OS2) + /* + * MS-Windows allows opening a device, but we will probably get stuck + * trying to read it. +--- 457,464 ---- + msg_scroll = msg_save; + return FAIL; + } +! #endif +! #if defined(MSDOS) || defined(MSWIN) || defined(OS2) + /* + * MS-Windows allows opening a device, but we will probably get stuck + * trying to read it. +*************** +*** 470,478 **** + msg_scroll = msg_save; + return FAIL; + } +- # endif +- } + #endif + + /* Set default or forced 'fileformat' and 'binary'. */ + set_file_options(set_options, eap); +--- 470,477 ---- + msg_scroll = msg_save; + return FAIL; + } + #endif ++ } + + /* Set default or forced 'fileformat' and 'binary'. */ + set_file_options(set_options, eap); +*** ../vim-7.4.013/src/version.c 2013-08-30 16:51:15.000000000 +0200 +--- src/version.c 2013-08-30 16:54:33.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 14, + /**/ + +-- +Drink wet cement and get really stoned. + + /// 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 --git a/7.4.015 b/7.4.015 new file mode 100644 index 0000000..e8b284d --- /dev/null +++ b/7.4.015 @@ -0,0 +1,106 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.015 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.015 +Problem: MS-Windows: Detecting node type does not work for multi-byte + characters. +Solution: Use wide character function when needed. (Ken Takata) +Files: src/os_win32.c + + +*** ../vim-7.4.014/src/os_win32.c 2013-08-10 12:39:12.000000000 +0200 +--- src/os_win32.c 2013-08-30 17:09:47.000000000 +0200 +*************** +*** 3107,3112 **** +--- 3107,3115 ---- + { + HANDLE hFile; + int type; ++ #ifdef FEAT_MBYTE ++ WCHAR *wn = NULL; ++ #endif + + /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to + * read from it later will cause Vim to hang. Thus return NODE_WRITABLE +*************** +*** 3114,3127 **** + if (STRNCMP(name, "\\\\.\\", 4) == 0) + return NODE_WRITABLE; + +! hFile = CreateFile(name, /* file name */ +! GENERIC_WRITE, /* access mode */ +! 0, /* share mode */ +! NULL, /* security descriptor */ +! OPEN_EXISTING, /* creation disposition */ +! 0, /* file attributes */ +! NULL); /* handle to template file */ + + if (hFile == INVALID_HANDLE_VALUE) + return NODE_NORMAL; + +--- 3117,3157 ---- + if (STRNCMP(name, "\\\\.\\", 4) == 0) + return NODE_WRITABLE; + +! #ifdef FEAT_MBYTE +! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! { +! wn = enc_to_utf16(name, NULL); +! if (wn != NULL) +! { +! hFile = CreateFileW(wn, /* file name */ +! GENERIC_WRITE, /* access mode */ +! 0, /* share mode */ +! NULL, /* security descriptor */ +! OPEN_EXISTING, /* creation disposition */ +! 0, /* file attributes */ +! NULL); /* handle to template file */ +! if (hFile == INVALID_HANDLE_VALUE +! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) +! { +! /* Retry with non-wide function (for Windows 98). */ +! vim_free(wn); +! wn = NULL; +! } +! } +! } +! if (wn == NULL) +! #endif +! hFile = CreateFile(name, /* file name */ +! GENERIC_WRITE, /* access mode */ +! 0, /* share mode */ +! NULL, /* security descriptor */ +! OPEN_EXISTING, /* creation disposition */ +! 0, /* file attributes */ +! NULL); /* handle to template file */ + ++ #ifdef FEAT_MBYTE ++ vim_free(wn); ++ #endif + if (hFile == INVALID_HANDLE_VALUE) + return NODE_NORMAL; + +*** ../vim-7.4.014/src/version.c 2013-08-30 17:06:56.000000000 +0200 +--- src/version.c 2013-08-30 17:09:35.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 15, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +144. You eagerly await the update of the "Cool Site of the Day." + + /// 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 --git a/7.4.016 b/7.4.016 new file mode 100644 index 0000000..c58c605 --- /dev/null +++ b/7.4.016 @@ -0,0 +1,221 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.016 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.016 +Problem: MS-Windows: File name completion doesn't work properly with + Chinese characters. (Yue Wu) +Solution: Add fname_casew(). (Ken Takata) +Files: src/os_win32.c + + +*** ../vim-7.4.015/src/os_win32.c 2013-08-30 17:11:29.000000000 +0200 +--- src/os_win32.c 2013-08-30 17:28:30.000000000 +0200 +*************** +*** 2500,2508 **** +--- 2500,2624 ---- + } + + ++ #ifdef FEAT_MBYTE ++ /* ++ * fname_casew(): Wide version of fname_case(). Set the case of the file name, ++ * if it already exists. When "len" is > 0, also expand short to long ++ * filenames. ++ * Return FAIL if wide functions are not available, OK otherwise. ++ * NOTE: much of this is identical to fname_case(), keep in sync! ++ */ ++ static int ++ fname_casew( ++ WCHAR *name, ++ int len) ++ { ++ WCHAR szTrueName[_MAX_PATH + 2]; ++ WCHAR szTrueNameTemp[_MAX_PATH + 2]; ++ WCHAR *ptrue, *ptruePrev; ++ WCHAR *porig, *porigPrev; ++ int flen; ++ WIN32_FIND_DATAW fb; ++ HANDLE hFind; ++ int c; ++ int slen; ++ ++ flen = (int)wcslen(name); ++ if (flen > _MAX_PATH) ++ return OK; ++ ++ /* slash_adjust(name) not needed, already adjusted by fname_case(). */ ++ ++ /* Build the new name in szTrueName[] one component at a time. */ ++ porig = name; ++ ptrue = szTrueName; ++ ++ if (iswalpha(porig[0]) && porig[1] == L':') ++ { ++ /* copy leading drive letter */ ++ *ptrue++ = *porig++; ++ *ptrue++ = *porig++; ++ *ptrue = NUL; /* in case nothing follows */ ++ } ++ ++ while (*porig != NUL) ++ { ++ /* copy \ characters */ ++ while (*porig == psepc) ++ *ptrue++ = *porig++; ++ ++ ptruePrev = ptrue; ++ porigPrev = porig; ++ while (*porig != NUL && *porig != psepc) ++ { ++ *ptrue++ = *porig++; ++ } ++ *ptrue = NUL; ++ ++ /* To avoid a slow failure append "\*" when searching a directory, ++ * server or network share. */ ++ wcscpy(szTrueNameTemp, szTrueName); ++ slen = (int)wcslen(szTrueNameTemp); ++ if (*porig == psepc && slen + 2 < _MAX_PATH) ++ wcscpy(szTrueNameTemp + slen, L"\\*"); ++ ++ /* Skip "", "." and "..". */ ++ if (ptrue > ptruePrev ++ && (ptruePrev[0] != L'.' ++ || (ptruePrev[1] != NUL ++ && (ptruePrev[1] != L'.' || ptruePrev[2] != NUL))) ++ && (hFind = FindFirstFileW(szTrueNameTemp, &fb)) ++ != INVALID_HANDLE_VALUE) ++ { ++ c = *porig; ++ *porig = NUL; ++ ++ /* Only use the match when it's the same name (ignoring case) or ++ * expansion is allowed and there is a match with the short name ++ * and there is enough room. */ ++ if (_wcsicoll(porigPrev, fb.cFileName) == 0 ++ || (len > 0 ++ && (_wcsicoll(porigPrev, fb.cAlternateFileName) == 0 ++ && (int)(ptruePrev - szTrueName) ++ + (int)wcslen(fb.cFileName) < len))) ++ { ++ wcscpy(ptruePrev, fb.cFileName); ++ ++ /* Look for exact match and prefer it if found. Must be a ++ * long name, otherwise there would be only one match. */ ++ while (FindNextFileW(hFind, &fb)) ++ { ++ if (*fb.cAlternateFileName != NUL ++ && (wcscoll(porigPrev, fb.cFileName) == 0 ++ || (len > 0 ++ && (_wcsicoll(porigPrev, ++ fb.cAlternateFileName) == 0 ++ && (int)(ptruePrev - szTrueName) ++ + (int)wcslen(fb.cFileName) < len)))) ++ { ++ wcscpy(ptruePrev, fb.cFileName); ++ break; ++ } ++ } ++ } ++ FindClose(hFind); ++ *porig = c; ++ ptrue = ptruePrev + wcslen(ptruePrev); ++ } ++ else if (hFind == INVALID_HANDLE_VALUE ++ && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) ++ return FAIL; ++ } ++ ++ wcscpy(name, szTrueName); ++ return OK; ++ } ++ #endif ++ + /* + * fname_case(): Set the case of the file name, if it already exists. + * When "len" is > 0, also expand short to long filenames. ++ * NOTE: much of this is identical to fname_casew(), keep in sync! + */ + void + fname_case( +*************** +*** 2520,2530 **** + int slen; + + flen = (int)STRLEN(name); +! if (flen == 0 || flen > _MAX_PATH) + return; + + slash_adjust(name); + + /* Build the new name in szTrueName[] one component at a time. */ + porig = name; + ptrue = szTrueName; +--- 2636,2679 ---- + int slen; + + flen = (int)STRLEN(name); +! if (flen == 0) + return; + + slash_adjust(name); + ++ #ifdef FEAT_MBYTE ++ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ++ { ++ WCHAR *p = enc_to_utf16(name, NULL); ++ ++ if (p != NULL) ++ { ++ char_u *q; ++ WCHAR buf[_MAX_PATH + 2]; ++ ++ wcscpy(buf, p); ++ vim_free(p); ++ ++ if (fname_casew(buf, (len > 0) ? _MAX_PATH : 0) == OK) ++ { ++ q = utf16_to_enc(buf, NULL); ++ if (q != NULL) ++ { ++ vim_strncpy(name, q, (len > 0) ? len - 1 : flen); ++ vim_free(q); ++ return; ++ } ++ } ++ } ++ /* Retry with non-wide function (for Windows 98). */ ++ } ++ #endif ++ ++ /* If 'enc' is utf-8, flen can be larger than _MAX_PATH. ++ * So we should check this after calling wide function. */ ++ if (flen > _MAX_PATH) ++ return; ++ + /* Build the new name in szTrueName[] one component at a time. */ + porig = name; + ptrue = szTrueName; +*** ../vim-7.4.015/src/version.c 2013-08-30 17:11:29.000000000 +0200 +--- src/version.c 2013-08-30 17:15:06.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 16, + /**/ + +-- +Fingers not found - Pound head on keyboard to continue. + + /// 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 --git a/7.4.017 b/7.4.017 new file mode 100644 index 0000000..7d7fad8 --- /dev/null +++ b/7.4.017 @@ -0,0 +1,78 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.017 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.017 +Problem: ":help !!" does not find the "!!" tag in the help file. (Ben + Fritz) +Solution: When reading the start of the tags file do parse lines that are + not header lines. +Files: src/tag.c + + +*** ../vim-7.4.016/src/tag.c 2013-06-15 22:26:26.000000000 +0200 +--- src/tag.c 2013-09-05 12:03:38.000000000 +0200 +*************** +*** 1797,1809 **** + */ + if (state == TS_START) + { +! /* The header ends when the line sorts below "!_TAG_". +! * There may be non-header items before the header though, +! * e.g. "!" itself. When case is folded lower case letters +! * sort before "_". */ + if (STRNCMP(lbuf, "!_TAG_", 6) <= 0 + || (lbuf[0] == '!' && ASCII_ISLOWER(lbuf[1]))) + { + /* + * Read header line. + */ +--- 1797,1812 ---- + */ + if (state == TS_START) + { +! /* The header ends when the line sorts below "!_TAG_". When +! * case is folded lower case letters sort before "_". */ + if (STRNCMP(lbuf, "!_TAG_", 6) <= 0 + || (lbuf[0] == '!' && ASCII_ISLOWER(lbuf[1]))) + { ++ if (STRNCMP(lbuf, "!_TAG_", 6) != 0) ++ /* Non-header item before the header, e.g. "!" itself. ++ */ ++ goto parse_line; ++ + /* + * Read header line. + */ +*************** +*** 1898,1903 **** +--- 1901,1907 ---- + #endif + } + ++ parse_line: + /* + * Figure out where the different strings are in this line. + * For "normal" tags: Do a quick check if the tag matches. +*** ../vim-7.4.016/src/version.c 2013-08-30 17:29:10.000000000 +0200 +--- src/version.c 2013-09-05 12:02:01.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 17, + /**/ + +-- +An error has occurred. Hit any user to continue. + + /// 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 --git a/7.4.018 b/7.4.018 new file mode 100644 index 0000000..2214c30 --- /dev/null +++ b/7.4.018 @@ -0,0 +1,45 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.018 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.018 +Problem: When completing item becomes unselected. (Shougo Matsu) +Solution: Revert patch 7.3.1269. +Files: src/edit.c + + +*** ../vim-7.4.017/src/edit.c 2013-07-04 20:22:25.000000000 +0200 +--- src/edit.c 2013-09-05 12:39:53.000000000 +0200 +*************** +*** 3467,3473 **** + } + + compl_enter_selects = !compl_used_match; +- compl_shown_match = compl_curr_match = compl_first_match; + + /* Show the popup menu with a different set of matches. */ + ins_compl_show_pum(); +--- 3467,3472 ---- +*** ../vim-7.4.017/src/version.c 2013-09-05 12:06:26.000000000 +0200 +--- src/version.c 2013-09-05 12:40:34.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 18, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +169. You hire a housekeeper for your home page. + + /// 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 --git a/7.4.019 b/7.4.019 new file mode 100644 index 0000000..b1532c1 --- /dev/null +++ b/7.4.019 @@ -0,0 +1,61 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.019 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.019 +Problem: MS-Windows: File name completion doesn't work properly with + Chinese characters. (Yue Wu) +Solution: Take care of multi-byte characters when looking for the start of + the file name. (Ken Takata) +Files: src/edit.c + + +*** ../vim-7.4.018/src/edit.c 2013-09-05 12:49:48.000000000 +0200 +--- src/edit.c 2013-09-05 13:45:27.000000000 +0200 +*************** +*** 5183,5190 **** + } + else if (ctrl_x_mode == CTRL_X_FILES) + { +! while (--startcol >= 0 && vim_isfilec(line[startcol])) +! ; + compl_col += ++startcol; + compl_length = (int)curs_col - startcol; + compl_pattern = addstar(line + compl_col, compl_length, +--- 5183,5196 ---- + } + else if (ctrl_x_mode == CTRL_X_FILES) + { +! char_u *p = line + startcol; +! +! /* Go back to just before the first filename character. */ +! mb_ptr_back(line, p); +! while (vim_isfilec(PTR2CHAR(p)) && p >= line) +! mb_ptr_back(line, p); +! startcol = p - line; +! + compl_col += ++startcol; + compl_length = (int)curs_col - startcol; + compl_pattern = addstar(line + compl_col, compl_length, +*** ../vim-7.4.018/src/version.c 2013-09-05 12:49:48.000000000 +0200 +--- src/version.c 2013-09-05 13:41:47.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 19, + /**/ + +-- + Very funny, Scotty. Now beam down my clothes. + + /// 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 --git a/7.4.020 b/7.4.020 new file mode 100644 index 0000000..942d82f --- /dev/null +++ b/7.4.020 @@ -0,0 +1,82 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.020 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.020 +Problem: NFA engine matches too much with \@>. (John McGowan) +Solution: When a whole pattern match is found stop searching. +Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok + + +*** ../vim-7.4.019/src/regexp_nfa.c 2013-08-25 17:01:36.000000000 +0200 +--- src/regexp_nfa.c 2013-09-05 15:59:44.000000000 +0200 +*************** +*** 5322,5328 **** + log_subsexpr(m); + #endif + nfa_match = TRUE; +! break; + + case NFA_START_INVISIBLE: + case NFA_START_INVISIBLE_FIRST: +--- 5322,5331 ---- + log_subsexpr(m); + #endif + nfa_match = TRUE; +! /* See comment above at "goto nextchar". */ +! if (nextlist->n == 0) +! clen = 0; +! goto nextchar; + + case NFA_START_INVISIBLE: + case NFA_START_INVISIBLE_FIRST: +*** ../vim-7.4.019/src/testdir/test64.in 2013-08-14 13:31:03.000000000 +0200 +--- src/testdir/test64.in 2013-09-05 15:35:44.000000000 +0200 +*************** +*** 427,432 **** +--- 427,433 ---- + :""""" \@> + :call add(tl, [2, '\(a*\)\@>a', 'aaaa']) + :call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa']) ++ :call add(tl, [2, '^\(.\{-}b\)\@>.', ' abcbd', ' abc', ' ab']) + :" TODO: BT engine does not restore submatch after failure + :call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa']) + :" +*** ../vim-7.4.019/src/testdir/test64.ok 2013-08-14 13:31:03.000000000 +0200 +--- src/testdir/test64.ok 2013-09-05 16:03:34.000000000 +0200 +*************** +*** 983,988 **** +--- 983,991 ---- + OK 0 - \(a*\)\@>b + OK 1 - \(a*\)\@>b + OK 2 - \(a*\)\@>b ++ OK 0 - ^\(.\{-}b\)\@>. ++ OK 1 - ^\(.\{-}b\)\@>. ++ OK 2 - ^\(.\{-}b\)\@>. + OK 0 - \(a*\)\@>a\|a\+ + OK 2 - \(a*\)\@>a\|a\+ + OK 0 - \_[^8-9]\+ +*** ../vim-7.4.019/src/version.c 2013-09-05 13:50:49.000000000 +0200 +--- src/version.c 2013-09-05 16:04:32.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 20, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +173. You keep tracking down the email addresses of all your friends + (even childhood friends). + + /// 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 --git a/7.4.021 b/7.4.021 new file mode 100644 index 0000000..0936d9a --- /dev/null +++ b/7.4.021 @@ -0,0 +1,86 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.021 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.021 +Problem: NFA regexp: Using \ze in one branch which doesn't match may cause + end of another branch to be wrong. (William Fugh) +Solution: Set end position if it wasn't set yet. +Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok + + +*** ../vim-7.4.020/src/regexp_nfa.c 2013-09-05 16:05:32.000000000 +0200 +--- src/regexp_nfa.c 2013-09-05 20:56:25.000000000 +0200 +*************** +*** 4209,4218 **** + break; + + case NFA_MCLOSE: +! if (nfa_has_zend) + { +! /* Do not overwrite the position set by \ze. If no \ze +! * encountered end will be set in nfa_regtry(). */ + subs = addstate(l, state->out, subs, pim, off); + break; + } +--- 4209,4219 ---- + break; + + case NFA_MCLOSE: +! if (nfa_has_zend && (REG_MULTI +! ? subs->norm.list.multi[0].end.lnum >= 0 +! : subs->norm.list.line[0].end != NULL)) + { +! /* Do not overwrite the position set by \ze. */ + subs = addstate(l, state->out, subs, pim, off); + break; + } +*** ../vim-7.4.020/src/testdir/test64.in 2013-09-05 16:05:32.000000000 +0200 +--- src/testdir/test64.in 2013-09-05 20:55:18.000000000 +0200 +*************** +*** 328,333 **** +--- 328,334 ---- + :call add(tl, [2, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 'match']) + :call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a if last']) + :call add(tl, [2, '\>\zs.', 'aword. ', '.']) ++ :call add(tl, [2, '\s\+\ze\[/\|\s\zs\s\+', 'is [a t', ' ']) + :" + :"""" Tests for \@= and \& features + :call add(tl, [2, 'abc\@=', 'abc', 'ab']) +*** ../vim-7.4.020/src/testdir/test64.ok 2013-09-05 16:05:32.000000000 +0200 +--- src/testdir/test64.ok 2013-09-05 21:09:56.000000000 +0200 +*************** +*** 752,757 **** +--- 752,760 ---- + OK 0 - \>\zs. + OK 1 - \>\zs. + OK 2 - \>\zs. ++ OK 0 - \s\+\ze\[/\|\s\zs\s\+ ++ OK 1 - \s\+\ze\[/\|\s\zs\s\+ ++ OK 2 - \s\+\ze\[/\|\s\zs\s\+ + OK 0 - abc\@= + OK 1 - abc\@= + OK 2 - abc\@= +*** ../vim-7.4.020/src/version.c 2013-09-05 16:05:32.000000000 +0200 +--- src/version.c 2013-09-05 21:11:38.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 21, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +174. You know what a listserv is. + + /// 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 --git a/7.4.022 b/7.4.022 new file mode 100644 index 0000000..81a0901 --- /dev/null +++ b/7.4.022 @@ -0,0 +1,148 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.022 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.022 +Problem: Deadlock while exiting, because of allocating memory. +Solution: Do not use gettext() in deathtrap(). (James McCoy) +Files: src/os_unix.c, src/misc1.c + + +*** ../vim-7.4.021/src/os_unix.c 2013-07-03 16:32:32.000000000 +0200 +--- src/os_unix.c 2013-09-05 21:40:06.000000000 +0200 +*************** +*** 957,964 **** + + /* + * This function handles deadly signals. +! * It tries to preserve any swap file and exit properly. + * (partly from Elvis). + */ + static RETSIGTYPE + deathtrap SIGDEFARG(sigarg) +--- 957,966 ---- + + /* + * This function handles deadly signals. +! * It tries to preserve any swap files and exit properly. + * (partly from Elvis). ++ * NOTE: Avoid unsafe functions, such as allocating memory, they can result in ++ * a deadlock. + */ + static RETSIGTYPE + deathtrap SIGDEFARG(sigarg) +*************** +*** 1090,1107 **** + } + if (entered == 2) + { +! OUT_STR(_("Vim: Double signal, exiting\n")); + out_flush(); + getout(1); + } + + #ifdef SIGHASARG +! sprintf((char *)IObuff, _("Vim: Caught deadly signal %s\n"), + signal_info[i].name); + #else +! sprintf((char *)IObuff, _("Vim: Caught deadly signal\n")); + #endif +! preserve_exit(); /* preserve files and exit */ + + #ifdef NBDEBUG + reset_signals(); +--- 1092,1114 ---- + } + if (entered == 2) + { +! /* No translation, it may call malloc(). */ +! OUT_STR("Vim: Double signal, exiting\n"); + out_flush(); + getout(1); + } + ++ /* No translation, it may call malloc(). */ + #ifdef SIGHASARG +! sprintf((char *)IObuff, "Vim: Caught deadly signal %s\n", + signal_info[i].name); + #else +! sprintf((char *)IObuff, "Vim: Caught deadly signal\n"); + #endif +! +! /* Preserve files and exit. This sets the really_exiting flag to prevent +! * calling free(). */ +! preserve_exit(); + + #ifdef NBDEBUG + reset_signals(); +*** ../vim-7.4.021/src/misc1.c 2013-08-03 17:29:33.000000000 +0200 +--- src/misc1.c 2013-09-05 21:34:04.000000000 +0200 +*************** +*** 9174,9179 **** +--- 9174,9181 ---- + /* + * Preserve files and exit. + * When called IObuff must contain a message. ++ * NOTE: This may be called from deathtrap() in a signal handler, avoid unsafe ++ * functions, such as allocating memory. + */ + void + preserve_exit() +*************** +*** 9196,9202 **** + { + if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) + { +! OUT_STR(_("Vim: preserving files...\n")); + screen_start(); /* don't know where cursor is now */ + out_flush(); + ml_sync_all(FALSE, FALSE); /* preserve all swap files */ +--- 9198,9204 ---- + { + if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) + { +! OUT_STR("Vim: preserving files...\n"); + screen_start(); /* don't know where cursor is now */ + out_flush(); + ml_sync_all(FALSE, FALSE); /* preserve all swap files */ +*************** +*** 9206,9212 **** + + ml_close_all(FALSE); /* close all memfiles, without deleting */ + +! OUT_STR(_("Vim: Finished.\n")); + + getout(1); + } +--- 9208,9214 ---- + + ml_close_all(FALSE); /* close all memfiles, without deleting */ + +! OUT_STR("Vim: Finished.\n"); + + getout(1); + } +*** ../vim-7.4.021/src/version.c 2013-09-05 21:15:38.000000000 +0200 +--- src/version.c 2013-09-05 21:30:18.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 22, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +175. You send yourself e-mail before you go to bed to remind you + what to do when you wake up. + + /// 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 --git a/7.4.023 b/7.4.023 new file mode 100644 index 0000000..0300521 --- /dev/null +++ b/7.4.023 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.023 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.023 +Problem: Compiler warning on 64 bit windows. +Solution: Add type cast. (Mike Williams) +Files: src/edit.c + + +*** ../vim-7.4.022/src/edit.c 2013-09-05 13:50:49.000000000 +0200 +--- src/edit.c 2013-09-06 17:32:55.000000000 +0200 +*************** +*** 5189,5195 **** + mb_ptr_back(line, p); + while (vim_isfilec(PTR2CHAR(p)) && p >= line) + mb_ptr_back(line, p); +! startcol = p - line; + + compl_col += ++startcol; + compl_length = (int)curs_col - startcol; +--- 5189,5195 ---- + mb_ptr_back(line, p); + while (vim_isfilec(PTR2CHAR(p)) && p >= line) + mb_ptr_back(line, p); +! startcol = (int)(p - line); + + compl_col += ++startcol; + compl_length = (int)curs_col - startcol; +*** ../vim-7.4.022/src/version.c 2013-09-05 21:41:35.000000000 +0200 +--- src/version.c 2013-09-06 17:33:41.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 23, + /**/ + +-- +Wizards had always known that the act of observation changed the thing that +was observed, and sometimes forgot that it also changed the observer too. + Terry Pratchett - Interesting times + + /// 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 --git a/7.4.024 b/7.4.024 new file mode 100644 index 0000000..da0df9c --- /dev/null +++ b/7.4.024 @@ -0,0 +1,61 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.024 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.024 +Problem: When root edits a file the undo file is owned by root while the + edited file may be owned by another user, which is not allowed. + (cac2s) +Solution: Accept an undo file owned by the current user. +Files: src/undo.c + + +*** ../vim-7.4.023/src/undo.c 2013-06-10 20:13:37.000000000 +0200 +--- src/undo.c 2013-09-07 15:45:56.000000000 +0200 +*************** +*** 1604,1613 **** + + #ifdef UNIX + /* For safety we only read an undo file if the owner is equal to the +! * owner of the text file. */ + if (mch_stat((char *)orig_name, &st_orig) >= 0 + && mch_stat((char *)file_name, &st_undo) >= 0 +! && st_orig.st_uid != st_undo.st_uid) + { + if (p_verbose > 0) + { +--- 1604,1614 ---- + + #ifdef UNIX + /* For safety we only read an undo file if the owner is equal to the +! * owner of the text file or equal to the current user. */ + if (mch_stat((char *)orig_name, &st_orig) >= 0 + && mch_stat((char *)file_name, &st_undo) >= 0 +! && st_orig.st_uid != st_undo.st_uid +! && st_undo.st_uid != getuid()) + { + if (p_verbose > 0) + { +*** ../vim-7.4.023/src/version.c 2013-09-07 16:35:38.000000000 +0200 +--- src/version.c 2013-09-08 15:38:52.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 24, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +186. You overstay in the office so you can have more time surfing the net. + + /// 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 --git a/7.4.025 b/7.4.025 new file mode 100644 index 0000000..9ead176 --- /dev/null +++ b/7.4.025 @@ -0,0 +1,62 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.025 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.025 (after 7.4.019 +Problem: Reading before start of a string. +Solution: Do not call mb_ptr_back() at start of a string. (Dominique Pelle) +Files: src/edit.c + + +*** ../vim-7.4.024/src/edit.c 2013-09-07 16:35:38.000000000 +0200 +--- src/edit.c 2013-09-08 15:57:20.000000000 +0200 +*************** +*** 5187,5197 **** + + /* Go back to just before the first filename character. */ + mb_ptr_back(line, p); +! while (vim_isfilec(PTR2CHAR(p)) && p >= line) + mb_ptr_back(line, p); +! startcol = (int)(p - line); + +! compl_col += ++startcol; + compl_length = (int)curs_col - startcol; + compl_pattern = addstar(line + compl_col, compl_length, + EXPAND_FILES); +--- 5187,5199 ---- + + /* Go back to just before the first filename character. */ + mb_ptr_back(line, p); +! while (p > line && vim_isfilec(PTR2CHAR(p))) + mb_ptr_back(line, p); +! startcol = (int)(p - line) + 1; +! if (p == line && vim_isfilec(PTR2CHAR(p))) +! startcol = 0; + +! compl_col += startcol; + compl_length = (int)curs_col - startcol; + compl_pattern = addstar(line + compl_col, compl_length, + EXPAND_FILES); +*** ../vim-7.4.024/src/version.c 2013-09-08 15:40:45.000000000 +0200 +--- src/version.c 2013-09-08 15:52:39.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 25, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +188. You purchase a laptop so you can surf while sitting on the can. + + /// 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 --git a/7.4.026 b/7.4.026 new file mode 100644 index 0000000..8add91f --- /dev/null +++ b/7.4.026 @@ -0,0 +1,65 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.026 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.026 +Problem: Clang warning for int shift overflow. +Solution: Use unsigned and cast back to int. (Dominique Pelle) +Files: src/misc2.c + + +*** ../vim-7.4.025/src/misc2.c 2013-07-07 16:03:35.000000000 +0200 +--- src/misc2.c 2013-09-08 16:04:54.000000000 +0200 +*************** +*** 6496,6508 **** + get4c(fd) + FILE *fd; + { +! int n; + +! n = getc(fd); +! n = (n << 8) + getc(fd); +! n = (n << 8) + getc(fd); +! n = (n << 8) + getc(fd); +! return n; + } + + /* +--- 6496,6510 ---- + get4c(fd) + FILE *fd; + { +! /* Use unsigned rather than int otherwise result is undefined +! * when left-shift sets the MSB. */ +! unsigned n; + +! n = (unsigned)getc(fd); +! n = (n << 8) + (unsigned)getc(fd); +! n = (n << 8) + (unsigned)getc(fd); +! n = (n << 8) + (unsigned)getc(fd); +! return (int)n; + } + + /* +*** ../vim-7.4.025/src/version.c 2013-09-08 16:03:40.000000000 +0200 +--- src/version.c 2013-09-08 16:05:40.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 26, + /**/ + +-- +A computer program does what you tell it to do, not what you want it to do. + + /// 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 --git a/7.4.027 b/7.4.027 new file mode 100644 index 0000000..ab43d59 --- /dev/null +++ b/7.4.027 @@ -0,0 +1,89 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.027 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.027 (after 7.4.025) +Problem: Another valgrind error when using CTRL-X CTRL-F at the start of + the line. (Dominique Pelle) +Solution: Don't call mb_ptr_back() at the start of the line. Add a test. +Files: src/edit.c, src/testdir/test32.in + + +*** ../vim-7.4.026/src/edit.c 2013-09-08 16:03:40.000000000 +0200 +--- src/edit.c 2013-09-08 18:18:32.000000000 +0200 +*************** +*** 5183,5197 **** + } + else if (ctrl_x_mode == CTRL_X_FILES) + { +- char_u *p = line + startcol; +- + /* Go back to just before the first filename character. */ +! mb_ptr_back(line, p); +! while (p > line && vim_isfilec(PTR2CHAR(p))) + mb_ptr_back(line, p); +! startcol = (int)(p - line) + 1; +! if (p == line && vim_isfilec(PTR2CHAR(p))) +! startcol = 0; + + compl_col += startcol; + compl_length = (int)curs_col - startcol; +--- 5183,5201 ---- + } + else if (ctrl_x_mode == CTRL_X_FILES) + { + /* Go back to just before the first filename character. */ +! if (startcol > 0) +! { +! char_u *p = line + startcol; +! + mb_ptr_back(line, p); +! while (p > line && vim_isfilec(PTR2CHAR(p))) +! mb_ptr_back(line, p); +! if (p == line && vim_isfilec(PTR2CHAR(p))) +! startcol = 0; +! else +! startcol = (int)(p - line) + 1; +! } + + compl_col += startcol; + compl_length = (int)curs_col - startcol; +*** ../vim-7.4.026/src/testdir/test32.in 2010-05-15 13:04:10.000000000 +0200 +--- src/testdir/test32.in 2013-09-08 18:08:07.000000000 +0200 +*************** +*** 36,41 **** +--- 36,44 ---- + :w Xtest11.one + :w Xtest11.two + OIXA ++ :" use CTRL-X CTRL-F to complete Xtest11.one, remove it and then use ++ :" CTRL-X CTRL-F again to verify this doesn't cause trouble. ++ OXddk + :se cpt=w + OST + :se cpt=u nohid +*** ../vim-7.4.026/src/version.c 2013-09-08 16:07:03.000000000 +0200 +--- src/version.c 2013-09-08 18:14:17.000000000 +0200 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 27, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +190. You quickly hand over your wallet, leather jacket, and car keys + during a mugging, then proceed to beat the crap out of your + assailant when he asks for your laptop. + + /// 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 --git a/README.patches b/README.patches index 5f4a880..183a75d 100644 --- a/README.patches +++ b/README.patches @@ -1,1346 +1,53 @@ -Patches for Vim - Vi IMproved 7.3 +Patches for Vim - Vi IMproved 7.4 -The files in this directory contain source code changes to fix -problems in released versions of Vim. Each file also contains an -explanation of the problem that is fixed, like the message that -was sent to the vim-dev maillist. +The files in this directory contain source code changes to fix problems +in a released version of Vim. Each file also contains an explanation of +the problem that is fixed, like the message that was sent to the vim-dev +maillist. -The best is to apply the patches in sequence. This avoids problems -when a patch depends on a previous patch. If you did not unpack the -extra archive, you may want to skip patches marked with "(extra)". -Similarly for the "lang" archive. Or ignore errors for missing files. +The best is to apply the patches in sequence. This avoids problems when +a patch depends on a previous patch. -Before patching, change to the top Vim directory, where the "src" -and "runtime" directories are located. -Depending on the version of "patch" that you use, you may have add -an argument to make it patch the right file: - patch -p < 7.3.001 - patch -p0 < 7.3.001 +Before patching, change to the top Vim directory, where the "src" and +"runtime" directories are located. +Depending on the version of "patch" that you use, you may have add an +argument to make it patch the right file: + patch -p < 7.4.001 + patch -p0 < 7.4.001 -After applying a patch, you need to compile Vim. There are no -patches for binaries. +After applying a patch, you need to compile Vim. There are no patches +for binaries. Checksums for the patch files can be found in the file MD5. -These patches were edited after their original submission to avoid patch to -fail. The original files are available with "orig." prepended: - 22565 7.3.202 cannot influence the indent inside a namespace - 5725 7.3.203 MS-Windows: Can't run external command without console window - 10891 7.3.223 MingW cross compilation doesn't work with tiny feat. - -Individual patches for Vim 7.3: +Individual patches for Vim 7.4: SIZE NAME FIXES - 1720 7.3.001 ":find" completion does not always shorten match properly - 1610 7.3.002 ":find" completion didn't work halfway an environment variable - 1299 7.3.003 crash with specific BufWritePost autocmd - 1300 7.3.004 crash when using very long regexp - 2747 7.3.005 crash when using undotree() - 2987 7.3.006 can't build some multi-byte code with C89 - 4442 7.3.007 Python code redefines "buffer", re-implements a grow-array - 11982 7.3.008 'cursorbind' is kept in places where 'scrollbind' is reset - 3197 7.3.009 Win32: Crash when using a bad argument for strftime() - 5466 7.3.010 Mac GUI: Missing break statements - 8811 7.3.011 X11 clipboard doesn't work in GUI, after :sh selection fails - 2127 7.3.012 problems building with MingW - 5979 7.3.013 dynamic loading with Ruby doesn't work for 1.9.2 - 2497 7.3.014 "a" in Ex mode with backslash at end of line doesn't work - 2223 7.3.015 a test is using an error message that no longer exists - 7448 7.3.016 netbeans interface doesn't work under Athena - 4314 7.3.017 errors reported by smatch - 2488 7.3.018 (after 7.3.012) missing argument to windres in MingW makefiles - 1577 7.3.019 ":nbstart" can fail silently - 3696 7.3.020 cursor position wrong when joining lines and 'fo' contains "a" - 2145 7.3.021 Mac: Boolean redefined when building with X11 - 1750 7.3.022 when opening a new window 'spellcapcheck' is cleared - 2086 7.3.023 external program may hang when it tries to write to the tty - 3222 7.3.024 named signs do not use a negative number as intended - 3412 7.3.025 ":mksession" does not escape file name properly - 1848 7.3.026 CTRL-] in a help file doesn't always work - 2668 7.3.027 MS-Windows: Opening a file on a network share is very slow - 5065 7.3.028 (after 7.3.024) signs don't show up - 4623 7.3.029 ":sort n" sorts lines without a number as number zero - 12512 7.3.030 cannot store Dict and List in viminfo file - 3620 7.3.031 can't pass the X window ID to another application - 21839 7.3.032 maparg() doesn't return the flags, e.g., ,