Merge pull request #1423 from wkennington/vim

Update vim from 7.4.23 -> 7.4.131
This commit is contained in:
Michael Raskin 2013-12-29 07:05:17 -08:00
commit c5bbad405d
24 changed files with 6 additions and 2720 deletions

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, ncurses, gettext, pkgconfig }:
{ stdenv, fetchhg, ncurses, gettext, pkgconfig }:
stdenv.mkDerivation rec {
patchLevel = "23";
name = "vim-7.4.${patchLevel}";
name = "vim-7.4.131";
src = fetchurl {
url = "ftp://ftp.vim.org/pub/vim/unix/${name}.tar.bz2";
sha256 = "1pjaffap91l2rb9pjnlbrpvb3ay5yhhr3g91zabjvw1rqk9adxfh";
src = fetchhg {
url = "https://vim.googlecode.com/hg/";
tag = "v7-4-131";
sha256 = "1akr0i4pykbrkqwrglm0dfn5nwpncb9pgg4h7fl6a8likbr5f3wb";
};
enableParallelBuilding = true;
@ -44,16 +44,6 @@ stdenv.mkDerivation rec {
# sed -i -e 's/as_fn_error.*int32.*/:/' src/auto/configure
# '';
prePatch = "cd src";
patches =
[ ./patches/7.4.001 ./patches/7.4.002 ./patches/7.4.003 ./patches/7.4.004
./patches/7.4.005 ./patches/7.4.006 ./patches/7.4.007 ./patches/7.4.008
./patches/7.4.009 ./patches/7.4.010 ./patches/7.4.011 ./patches/7.4.012
./patches/7.4.013 ./patches/7.4.014 ./patches/7.4.015 ./patches/7.4.016
./patches/7.4.017 ./patches/7.4.018 ./patches/7.4.019 ./patches/7.4.020
./patches/7.4.021 ./patches/7.4.022 ./patches/7.4.023 ];
meta = with stdenv.lib; {
description = "The most popular clone of the VI editor";
homepage = http://www.vim.org;

View File

@ -1,489 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.001
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,77 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.002
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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\@<!\)\/', 'x = /word/;', '/'])
+ :"
:""""" \@>
: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\@<!\)\/
+ OK 1 - \(r\@<=\|\w\@<!\)\/
+ OK 2 - \(r\@<=\|\w\@<!\)\/
OK 0 - \(a*\)\@>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 ///

View File

@ -1,100 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.003
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,232 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.004
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,48 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.005
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,66 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.006
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,95 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.007
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,71 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.008
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,64 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.009
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,79 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.010
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,100 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.011
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,202 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.012
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,99 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.013
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,102 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.014
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,106 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.015
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,221 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.016
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,78 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.017
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,45 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.018
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,61 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.019
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,82 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.020
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,86 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.021
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,148 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.022
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///

View File

@ -1,53 +0,0 @@
To: vim_dev@googlegroups.com
Subject: Patch 7.4.023
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///