]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.245
- new
[packages/vim.git] / 7.2.245
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.245
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.245
11 Problem:    When 'enc' is "utf-16" and 'fenc' is "utf-8" writing a file does
12             conversion while none should be done. (Yukihiro Nakadaira) When
13             'fenc' is empty the file is written as utf-8 instead of utf-16.
14 Solution:   Do proper comparison of encodings, taking into account that all
15             Unicode values for 'enc' use utf-8 internally.
16 Files:      src/fileio.c
17
18
19 *** ../vim-7.2.244/src/fileio.c 2009-07-29 18:05:57.000000000 +0200
20 --- src/fileio.c        2009-07-29 17:04:06.000000000 +0200
21 ***************
22 *** 134,140 ****
23   #ifdef FEAT_MBYTE
24   static linenr_T readfile_linenr __ARGS((linenr_T linecnt, char_u *p, char_u *endp));
25   static int ucs2bytes __ARGS((unsigned c, char_u **pp, int flags));
26 ! static int same_encoding __ARGS((char_u *a, char_u *b));
27   static int get_fio_flags __ARGS((char_u *ptr));
28   static char_u *check_for_bom __ARGS((char_u *p, long size, int *lenp, int flags));
29   static int make_bom __ARGS((char_u *buf, char_u *name));
30 --- 134,140 ----
31   #ifdef FEAT_MBYTE
32   static linenr_T readfile_linenr __ARGS((linenr_T linecnt, char_u *p, char_u *endp));
33   static int ucs2bytes __ARGS((unsigned c, char_u **pp, int flags));
34 ! static int need_conversion __ARGS((char_u *fenc));
35   static int get_fio_flags __ARGS((char_u *ptr));
36   static char_u *check_for_bom __ARGS((char_u *p, long size, int *lenp, int flags));
37   static int make_bom __ARGS((char_u *buf, char_u *name));
38 ***************
39 *** 1043,1055 ****
40       }
41   
42       /*
43 !      * Conversion is required when the encoding of the file is different
44 !      * from 'encoding' or 'encoding' is UTF-16, UCS-2 or UCS-4 (requires
45 !      * conversion to UTF-8).
46        */
47       fio_flags = 0;
48 !     converted = (*fenc != NUL && !same_encoding(p_enc, fenc));
49 !     if (converted || enc_unicode != 0)
50       {
51   
52         /* "ucs-bom" means we need to check the first bytes of the file
53 --- 1043,1054 ----
54       }
55   
56       /*
57 !      * Conversion may be required when the encoding of the file is different
58 !      * from 'encoding' or 'encoding' is UTF-16, UCS-2 or UCS-4.
59        */
60       fio_flags = 0;
61 !     converted = need_conversion(fenc);
62 !     if (converted)
63       {
64   
65         /* "ucs-bom" means we need to check the first bytes of the file
66 ***************
67 *** 3969,3978 ****
68         fenc = buf->b_p_fenc;
69   
70       /*
71 !      * The file needs to be converted when 'fileencoding' is set and
72 !      * 'fileencoding' differs from 'encoding'.
73        */
74 !     converted = (*fenc != NUL && !same_encoding(p_enc, fenc));
75   
76       /*
77        * Check if UTF-8 to UCS-2/4 or Latin1 conversion needs to be done.  Or
78 --- 3968,3976 ----
79         fenc = buf->b_p_fenc;
80   
81       /*
82 !      * Check if the file needs to be converted.
83        */
84 !     converted = need_conversion(fenc);
85   
86       /*
87        * Check if UTF-8 to UCS-2/4 or Latin1 conversion needs to be done.  Or
88 ***************
89 *** 5502,5521 ****
90   }
91   
92   /*
93 !  * Return TRUE if "a" and "b" are the same 'encoding'.
94 !  * Ignores difference between "ansi" and "latin1", "ucs-4" and "ucs-4be", etc.
95    */
96       static int
97 ! same_encoding(a, b)
98 !     char_u    *a;
99 !     char_u    *b;
100   {
101 !     int               f;
102   
103 !     if (STRCMP(a, b) == 0)
104 !       return TRUE;
105 !     f = get_fio_flags(a);
106 !     return (f != 0 && get_fio_flags(b) == f);
107   }
108   
109   /*
110 --- 5500,5536 ----
111   }
112   
113   /*
114 !  * Return TRUE if file encoding "fenc" requires conversion from or to
115 !  * 'encoding'.
116    */
117       static int
118 ! need_conversion(fenc)
119 !     char_u    *fenc;
120   {
121 !     int               same_encoding;
122 !     int               enc_flags;
123 !     int               fenc_flags;
124   
125 !     if (*fenc == NUL || STRCMP(p_enc, fenc) == 0)
126 !       same_encoding = TRUE;
127 !     else
128 !     {
129 !       /* Ignore difference between "ansi" and "latin1", "ucs-4" and
130 !        * "ucs-4be", etc. */
131 !       enc_flags = get_fio_flags(p_enc);
132 !       fenc_flags = get_fio_flags(fenc);
133 !       same_encoding = (enc_flags != 0 && fenc_flags == enc_flags);
134 !     }
135 !     if (same_encoding)
136 !     {
137 !       /* Specified encoding matches with 'encoding'.  This requires
138 !        * conversion when 'encoding' is Unicode but not UTF-8. */
139 !       return enc_unicode != 0;
140 !     }
141
142 !     /* Encodings differ.  However, conversion is not needed when 'enc' is any
143 !      * Unicode encoding and the file is UTF-8. */
144 !     return !(enc_utf8 && fenc_flags == FIO_UTF8);
145   }
146   
147   /*
148 *** ../vim-7.2.244/src/version.c        2009-07-29 18:05:57.000000000 +0200
149 --- src/version.c       2009-07-29 18:20:08.000000000 +0200
150 ***************
151 *** 678,679 ****
152 --- 678,681 ----
153   {   /* Add new patch number below this line */
154 + /**/
155 +     245,
156   /**/
157
158 -- 
159 An actual excerpt from a classified section of a city newspaper:
160 "Illiterate?  Write today for free help!"
161
162  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
163 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
164 \\\        download, build and distribute -- http://www.A-A-P.org        ///
165  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.043993 seconds and 3 git commands to generate.