Fossil SCM

implement big-endian unicode decoding for commit message files

jan.nijtmans 2012-10-14 19:55 use-utf8-in-win-external-editor
Commit 514f71a1cfdcdf439dfabdd69fd6d1500f40d509
1 file changed +17 -3
+17 -3
--- src/checkin.c
+++ src/checkin.c
@@ -1219,13 +1219,27 @@
12191219
zUtf8 = blob_str(&comment) + 2;
12201220
zUtf8 = fossil_unicode_to_utf8(zUtf8);
12211221
blob_zero(&comment);
12221222
blob_append(&comment, zUtf8, -1);
12231223
fossil_mbcs_free(zUtf8);
1224
- }else if( blob_size(&comment)>1
1225
- && memcmp(blob_buffer(&comment), &urbom, 2)==0 ){
1226
- fossil_fatal("unicode bom (be) not (yet) implemented");
1224
+ }else if( blob_size(&comment)>1 && (blob_size(&comment)&1)==0
1225
+ && memcmp(blob_buffer(&comment), &urbom, 2)==0 ) {
1226
+ char *zUtf8 = blob_buffer(&comment);
1227
+ unsigned int i = blob_size(&comment);
1228
+ while( i > 0 ){
1229
+ /* swap bytes of unicode representation */
1230
+ char temp = zUtf8[--i];
1231
+ zUtf8[i] = zUtf8[i-1];
1232
+ zUtf8[--i] = temp;
1233
+ }
1234
+ /* Make sure the blob contains two terminating 0-bytes */
1235
+ blob_append(&comment, "", 1);
1236
+ zUtf8 = blob_str(&comment) + 2;
1237
+ zUtf8 = fossil_unicode_to_utf8(zUtf8);
1238
+ blob_zero(&comment);
1239
+ blob_append(&comment, zUtf8, -1);
1240
+ fossil_mbcs_free(zUtf8);
12271241
}else{
12281242
char *zUtf8 = fossil_mbcs_to_utf8(blob_str(&comment));
12291243
blob_zero(&comment);
12301244
blob_append(&comment, zUtf8, -1);
12311245
fossil_mbcs_free(zUtf8);
12321246
--- src/checkin.c
+++ src/checkin.c
@@ -1219,13 +1219,27 @@
1219 zUtf8 = blob_str(&comment) + 2;
1220 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1221 blob_zero(&comment);
1222 blob_append(&comment, zUtf8, -1);
1223 fossil_mbcs_free(zUtf8);
1224 }else if( blob_size(&comment)>1
1225 && memcmp(blob_buffer(&comment), &urbom, 2)==0 ){
1226 fossil_fatal("unicode bom (be) not (yet) implemented");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1227 }else{
1228 char *zUtf8 = fossil_mbcs_to_utf8(blob_str(&comment));
1229 blob_zero(&comment);
1230 blob_append(&comment, zUtf8, -1);
1231 fossil_mbcs_free(zUtf8);
1232
--- src/checkin.c
+++ src/checkin.c
@@ -1219,13 +1219,27 @@
1219 zUtf8 = blob_str(&comment) + 2;
1220 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1221 blob_zero(&comment);
1222 blob_append(&comment, zUtf8, -1);
1223 fossil_mbcs_free(zUtf8);
1224 }else if( blob_size(&comment)>1 && (blob_size(&comment)&1)==0
1225 && memcmp(blob_buffer(&comment), &urbom, 2)==0 ) {
1226 char *zUtf8 = blob_buffer(&comment);
1227 unsigned int i = blob_size(&comment);
1228 while( i > 0 ){
1229 /* swap bytes of unicode representation */
1230 char temp = zUtf8[--i];
1231 zUtf8[i] = zUtf8[i-1];
1232 zUtf8[--i] = temp;
1233 }
1234 /* Make sure the blob contains two terminating 0-bytes */
1235 blob_append(&comment, "", 1);
1236 zUtf8 = blob_str(&comment) + 2;
1237 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1238 blob_zero(&comment);
1239 blob_append(&comment, zUtf8, -1);
1240 fossil_mbcs_free(zUtf8);
1241 }else{
1242 char *zUtf8 = fossil_mbcs_to_utf8(blob_str(&comment));
1243 blob_zero(&comment);
1244 blob_append(&comment, zUtf8, -1);
1245 fossil_mbcs_free(zUtf8);
1246

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button