]> git.pld-linux.org Git - packages/vim.git/blame - 7.2.244
- new
[packages/vim.git] / 7.2.244
CommitLineData
e4816a84
ER
1To: vim-dev@vim.org
2Subject: Patch 7.2.244
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.2.244
11Problem: When 'enc' is utf-8 and 'fenc' is latin1, writing a non-latin1
12 character gives a conversion error without any hint what is wrong.
13Solution: When known add the line number to the error message.
14Files: src/fileio.c
15
16
17*** ../vim-7.2.243/src/fileio.c 2009-07-29 12:09:49.000000000 +0200
18--- src/fileio.c 2009-07-29 17:04:06.000000000 +0200
19***************
20*** 121,126 ****
21--- 121,128 ----
22 char_u *bw_conv_buf; /* buffer for writing converted chars */
23 int bw_conv_buflen; /* size of bw_conv_buf */
24 int bw_conv_error; /* set for conversion error */
25+ linenr_T bw_conv_error_lnum; /* first line with error or zero */
26+ linenr_T bw_start_lnum; /* line number at start of buffer */
27 # ifdef USE_ICONV
28 iconv_t bw_iconv_fd; /* descriptor for iconv() or -1 */
29 # endif
30***************
31*** 2924,2929 ****
32--- 2925,2931 ----
33 linenr_T lnum;
34 long nchars;
35 char_u *errmsg = NULL;
36+ int errmsg_allocated = FALSE;
37 char_u *errnum = NULL;
38 char_u *buffer;
39 char_u smallbuf[SMBUFSIZE];
40***************
41*** 2987,2992 ****
42--- 2989,2995 ----
43 /* must init bw_conv_buf and bw_iconv_fd before jumping to "fail" */
44 write_info.bw_conv_buf = NULL;
45 write_info.bw_conv_error = FALSE;
46+ write_info.bw_conv_error_lnum = 0;
47 write_info.bw_restlen = 0;
48 # ifdef USE_ICONV
49 write_info.bw_iconv_fd = (iconv_t)-1;
50***************
51*** 4243,4248 ****
52--- 4245,4251 ----
53 nchars += write_info.bw_len;
54 }
55 }
56+ write_info.bw_start_lnum = start;
57 #endif
58
59 write_info.bw_len = bufsize;
60***************
61*** 4278,4283 ****
62--- 4281,4289 ----
63 nchars += bufsize;
64 s = buffer;
65 len = 0;
66+ #ifdef FEAT_MBYTE
67+ write_info.bw_start_lnum = lnum;
68+ #endif
69 }
70 /* write failed or last line has no EOL: stop here */
71 if (end == 0
72***************
73*** 4474,4480 ****
74 {
75 #ifdef FEAT_MBYTE
76 if (write_info.bw_conv_error)
77! errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
78 else
79 #endif
80 if (got_int)
81--- 4480,4496 ----
82 {
83 #ifdef FEAT_MBYTE
84 if (write_info.bw_conv_error)
85! {
86! if (write_info.bw_conv_error_lnum == 0)
87! errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
88! else
89! {
90! errmsg_allocated = TRUE;
91! errmsg = alloc(300);
92! vim_snprintf((char *)errmsg, 300, _("E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"),
93! (long)write_info.bw_conv_error_lnum);
94! }
95! }
96 else
97 #endif
98 if (got_int)
99***************
100*** 4550,4555 ****
101--- 4566,4577 ----
102 {
103 STRCAT(IObuff, _(" CONVERSION ERROR"));
104 c = TRUE;
105+ if (write_info.bw_conv_error_lnum != 0)
106+ {
107+ int l = STRLEN(IObuff);
108+ vim_snprintf((char *)IObuff + l, IOSIZE - l, _(" in line %ld;"),
109+ (long)write_info.bw_conv_error_lnum);
110+ }
111 }
112 else if (notconverted)
113 {
114***************
115*** 4746,4751 ****
116--- 4768,4775 ----
117 }
118 STRCAT(IObuff, errmsg);
119 emsg(IObuff);
120+ if (errmsg_allocated)
121+ vim_free(errmsg);
122
123 retval = FAIL;
124 if (end == 0)
125***************
126*** 5105,5111 ****
127 c = buf[wlen];
128 }
129
130! ip->bw_conv_error |= ucs2bytes(c, &p, flags);
131 }
132 if (flags & FIO_LATIN1)
133 len = (int)(p - buf);
134--- 5129,5141 ----
135 c = buf[wlen];
136 }
137
138! if (ucs2bytes(c, &p, flags) && !ip->bw_conv_error)
139! {
140! ip->bw_conv_error = TRUE;
141! ip->bw_conv_error_lnum = ip->bw_start_lnum;
142! }
143! if (c == NL)
144! ++ip->bw_start_lnum;
145 }
146 if (flags & FIO_LATIN1)
147 len = (int)(p - buf);
148***************
149*** 5386,5391 ****
150--- 5416,5422 ----
151 #ifdef FEAT_MBYTE
152 /*
153 * Convert a Unicode character to bytes.
154+ * Return TRUE for an error, FALSE when it's OK.
155 */
156 static int
157 ucs2bytes(c, pp, flags)
158*** ../vim-7.2.243/src/version.c 2009-07-29 16:13:35.000000000 +0200
159--- src/version.c 2009-07-29 18:01:27.000000000 +0200
160***************
161*** 678,679 ****
162--- 678,681 ----
163 { /* Add new patch number below this line */
164+ /**/
165+ 244,
166 /**/
167
168--
169Support your right to bare arms! Wear short sleeves!
170
171 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
172/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
173\\\ download, build and distribute -- http://www.A-A-P.org ///
174 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.05811 seconds and 4 git commands to generate.