]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.244
- new
[packages/vim.git] / 7.2.244
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.244
3 Fcc: outbox
4 From: Bram Moolenaar <Bram@moolenaar.net>
5 Mime-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8 ------------
9
10 Patch 7.2.244
11 Problem:    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.
13 Solution:   When known add the line number to the error message.
14 Files:      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 -- 
169 Support 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.034995 seconds and 3 git commands to generate.