diff options
author | dgp <dgp@users.sourceforge.net> | 2015-11-30 21:21:48 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2015-11-30 21:21:48 (GMT) |
commit | a24fdcc2b9295b493a9cd9e7632be98c5ddb3f6a (patch) | |
tree | 24ccb2318d04412685b1a4262df7c33df0864d34 /generic/tkOption.c | |
parent | ddb9e825e0b85f216d172f8b537257c8d58b0de9 (diff) | |
parent | b8bfd3505b511a3cc94297df7f04c55505d6df2c (diff) | |
download | tk-a24fdcc2b9295b493a9cd9e7632be98c5ddb3f6a.zip tk-a24fdcc2b9295b493a9cd9e7632be98c5ddb3f6a.tar.gz tk-a24fdcc2b9295b493a9cd9e7632be98c5ddb3f6a.tar.bz2 |
merge 8.5
Diffstat (limited to 'generic/tkOption.c')
-rw-r--r-- | generic/tkOption.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/generic/tkOption.c b/generic/tkOption.c index 91a6cc0..bff799b 100644 --- a/generic/tkOption.c +++ b/generic/tkOption.c @@ -1086,7 +1086,7 @@ ReadOptionFile( char *buffer; int result, bufferSize; Tcl_Channel chan; - Tcl_DString newName; + Tcl_DString newName, optString; /* * Prevent file system access in a safe interpreter. @@ -1136,7 +1136,16 @@ ReadOptionFile( } Tcl_Close(NULL, chan); buffer[bufferSize] = 0; - result = AddFromString(interp, tkwin, buffer, priority); + if ((bufferSize>2) && !memcmp(buffer, "\357\273\277", 3)) { + /* File starts with UTF-8 BOM */ + result = AddFromString(interp, tkwin, buffer+3, priority); + } else { + Tcl_DStringInit(&optString); + Tcl_ExternalToUtfDString(NULL, buffer, bufferSize, &optString); + result = AddFromString(interp, tkwin, Tcl_DStringValue(&optString), + priority); + Tcl_DStringFree(&optString); + } ckfree(buffer); return result; } |