summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2007-11-27 20:30:40 (GMT)
committerdgp <dgp@users.sourceforge.net>2007-11-27 20:30:40 (GMT)
commitbc12fd68ee94dccdac5e1e6d04f160cbbad550ee (patch)
tree2c3543df68f97e1382dd5947f31e9b174b0be734
parent1c7799332924b711817436fc8940be2eff501b5c (diff)
downloadtcl-bc12fd68ee94dccdac5e1e6d04f160cbbad550ee.zip
tcl-bc12fd68ee94dccdac5e1e6d04f160cbbad550ee.tar.gz
tcl-bc12fd68ee94dccdac5e1e6d04f160cbbad550ee.tar.bz2
* win/tclWinSock.c: Add missing encoding conversion of the
[info hostname] value from the system encoding to Tcl's internal encoding. This is important now that ICANN no longer limits host names to ASCII. [Bug 1823552]
-rw-r--r--ChangeLog7
-rw-r--r--win/tclWinSock.c21
2 files changed, 23 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 37dc948..04f1d12 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-27 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinSock.c: Add missing encoding conversion of the
+ [info hostname] value from the system encoding to Tcl's internal
+ encoding. This is important now that ICANN no longer limits host
+ names to ASCII. [Bug 1823552]
+
2007-11-26 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
* generic/tclThread.c: Back-port locking changes from Tcl8.5
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index feeb374..32cfb19 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclWinSock.c,v 1.36.2.6 2006/09/26 21:40:37 patthoyts Exp $
+ * RCS: @(#) $Id: tclWinSock.c,v 1.36.2.7 2007/11/27 20:30:42 dgp Exp $
*/
#include "tclWinInt.h"
@@ -2550,14 +2550,25 @@ Tcl_GetHostName()
Tcl_MutexUnlock(&socketMutex);
if (TclpHasSockets(NULL) == TCL_OK) {
- /*
- * INTL: bug
- */
+ Tcl_DString ds;
- if (winSock.gethostname(hostname, sizeof(hostname)) == 0) {
+ Tcl_DStringInit(&ds);
+ Tcl_DStringSetLength(&ds, 255);
+ if (winSock.gethostname(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds))
+ == 0) {
+ Tcl_DString utfDs;
+
+ Tcl_DStringInit(&utfDs);
+ Tcl_ExternalToUtfDString(NULL, Tcl_DStringValue(&ds),
+ Tcl_DStringLength(&ds), &utfDs);
+ Tcl_DStringFree(&ds);
+
Tcl_MutexLock(&socketMutex);
+ strcpy(hostname, Tcl_DStringValue(&utfDs));
+ Tcl_UtfToLower(hostname);
hostnameInitialized = 1;
Tcl_MutexUnlock(&socketMutex);
+ Tcl_DStringFree(&utfDs);
return hostname;
}
}