Revision: 3156 http://geany.svn.sourceforge.net/geany/?rev=3156&view=rev Author: eht16 Date: 2008-10-26 14:16:09 +0000 (Sun, 26 Oct 2008)
Log Message: ----------- Handle UTF16/32 encoded files without a BOM better and allow them to opened (#2155573, patch by Jason Oster, thanks).
Modified Paths: -------------- trunk/ChangeLog trunk/TODO trunk/src/document.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-10-25 18:57:00 UTC (rev 3155) +++ trunk/ChangeLog 2008-10-26 14:16:09 UTC (rev 3156) @@ -1,3 +1,10 @@ +2008-10-26 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * src/document.c: + Handle UTF16/32 encoded files without a BOM better and allow + them to opened (#2155573, patch by Jason Oster, thanks). + + 2008-10-25 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/main.c, src/plugins.c:
Modified: trunk/TODO =================================================================== --- trunk/TODO 2008-10-25 18:57:00 UTC (rev 3155) +++ trunk/TODO 2008-10-26 14:16:09 UTC (rev 3156) @@ -3,7 +3,6 @@ Note: features included in brackets have lower priority.
Fix bugs: - o fix bug that prevents UTF-16, UTF-32 files from being loaded o tagmanager fails on UTF-16/32
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2008-10-25 18:57:00 UTC (rev 3155) +++ trunk/src/document.c 2008-10-26 14:16:09 UTC (rev 3156) @@ -636,7 +636,7 @@ else { gchar *converted_text = encodings_convert_to_utf8_from_charset( - filedata->data, filedata->len, forced_enc, FALSE); + filedata->data, filedata->size, forced_enc, FALSE); if (converted_text == NULL) { return FALSE; @@ -657,7 +657,7 @@
/* detect encoding and convert to UTF-8 if necessary */ static gboolean -handle_encoding(FileData *filedata) +handle_encoding(FileData *filedata, GeanyEncodingIndex enc_idx) { g_return_val_if_fail(filedata->enc == NULL, FALSE); g_return_val_if_fail(filedata->bom == FALSE, FALSE); @@ -671,9 +671,6 @@ else { /* first check for a BOM */ - GeanyEncodingIndex enc_idx = - encodings_scan_unicode_bom(filedata->data, filedata->size, NULL); - if (enc_idx != GEANY_ENCODING_NONE) { filedata->enc = g_strdup(encodings[enc_idx].charset); @@ -702,7 +699,8 @@ if (filedata->enc == NULL) /* either there was no BOM or the BOM encoding failed */ { /* try UTF-8 first */ - if (g_utf8_validate(filedata->data, filedata->len, NULL)) + if ((filedata->size == filedata->len) && + g_utf8_validate(filedata->data, filedata->len, NULL)) { filedata->enc = g_strdup("UTF-8"); } @@ -779,13 +777,12 @@ * if we have a BOM */ tmp_enc_idx = encodings_scan_unicode_bom(filedata->data, filedata->size, NULL);
- /* check whether the size of the loaded data is equal to the size of the file in the filesystem */ - /* file size may be 0 to allow opening files in /proc/ which have typically a file size - * of 0 bytes */ + /* check whether the size of the loaded data is equal to the size of the file in the + * filesystem file size may be 0 to allow opening files in /proc/ which have typically a + * file size of 0 bytes */ if (filedata->len != filedata->size && filedata->size != 0 && ( tmp_enc_idx == GEANY_ENCODING_UTF_8 || /* tmp_enc_idx can be UTF-7/8/16/32, UCS and None */ - tmp_enc_idx == GEANY_ENCODING_UTF_7 || /* filter out UTF-7/8 and None where no NULL bytes */ - tmp_enc_idx == GEANY_ENCODING_NONE)) /* are allowed */ + tmp_enc_idx == GEANY_ENCODING_UTF_7)) /* filter UTF-7/8 where no NULL bytes are allowed */ { const gchar *warn_msg = _( "The file "%s" could not be opened properly and has been truncated. " \ @@ -812,16 +809,17 @@ } else if (! handle_forced_encoding(filedata, forced_enc)) { - ui_set_statusbar(TRUE, _("The file "%s" is not valid %s."), utf8_filename, forced_enc); + ui_set_statusbar(TRUE, _("The file "%s" is not valid %s."), + utf8_filename, forced_enc); utils_beep(); g_free(filedata->data); return FALSE; } } - else if (! handle_encoding(filedata)) + else if (! handle_encoding(filedata, tmp_enc_idx)) { ui_set_statusbar(TRUE, - _("The file "%s" does not look like a text file or the file encoding is not supported."), + _("The file "%s" does not look like a text file or the file encoding is not supported."), utf8_filename); utils_beep(); g_free(filedata->data);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.