Index: win/tclWinFCmd.c
===================================================================
RCS file: /cvsroot/tcl/tcl/win/tclWinFCmd.c,v
retrieving revision 1.67
diff -u -r1.67 tclWinFCmd.c
--- win/tclWinFCmd.c	20 Sep 2010 14:28:15 -0000	1.67
+++ win/tclWinFCmd.c	21 Sep 2010 09:34:36 -0000
@@ -12,14 +12,6 @@
  * RCS: @(#) $Id: tclWinFCmd.c,v 1.67 2010/09/20 14:28:15 nijtmans Exp $
  */
 
-/* TODO: This file does not compile in UNICODE mode.
- * See [Freq 2965056]: Windows build with -DUNICODE
- * and
- * [Bug 3069278]: breakage on head Windows triggered by install-tzdata
- */
-#undef UNICODE
-#undef _UNICODE
-
 #include "tclWinInt.h"
 
 /*
@@ -339,8 +331,8 @@
 	    TCHAR *nativeSrcRest, *nativeDstRest;
 	    const char **srcArgv, **dstArgv;
 	    int size, srcArgc, dstArgc;
-	    TCHAR nativeSrcPath[MAX_PATH * 2];
-	    TCHAR nativeDstPath[MAX_PATH * 2];
+	    TCHAR nativeSrcPath[MAX_PATH];
+	    TCHAR nativeDstPath[MAX_PATH];
 	    Tcl_DString srcString, dstString;
 	    const char *src, *dst;
 
@@ -476,7 +468,7 @@
 
 		TCHAR *nativeRest, *nativeTmp, *nativePrefix;
 		int result, size;
-		TCHAR tempBuf[MAX_PATH * 2];
+		TCHAR tempBuf[MAX_PATH];
 
 		size = tclWinProcs->getFullPathNameProc(nativeDst, MAX_PATH,
 			tempBuf, &nativeRest);
@@ -484,7 +476,7 @@
 		    return TCL_ERROR;
 		}
 		nativeTmp = (TCHAR *) tempBuf;
-		nativeRest[0] = '\0';
+		nativeRest[0] = L'\0';
 
 		result = TCL_ERROR;
 		nativePrefix = (TCHAR *) L"tclr";
@@ -1304,7 +1296,7 @@
 	goto end;
     }
 
-    nativeSource[oldSourceLen + 1] = '\0';
+    Tcl_DStringSetLength(sourcePtr, oldSourceLen + 1);
     Tcl_DStringSetLength(sourcePtr, oldSourceLen);
     result = traverseProc(nativeSource, nativeTarget, DOTREE_PRED,
 	    errorPtr);
Index: win/tclWinPipe.c
===================================================================
RCS file: /cvsroot/tcl/tcl/win/tclWinPipe.c,v
retrieving revision 1.83
diff -u -r1.83 tclWinPipe.c
--- win/tclWinPipe.c	20 Sep 2010 14:28:15 -0000	1.83
+++ win/tclWinPipe.c	21 Sep 2010 09:34:38 -0000
@@ -3133,8 +3133,8 @@
 	sprintf(number, "%d.TMP", counter);
 	counter = (unsigned short) (counter + 1);
 	tclWinProcs->utf2tchar(number, strlen(number), &buf);
-	memcpy(namePtr, Tcl_DStringValue(&buf), Tcl_DStringLength(&buf));
-	*(WCHAR *)(namePtr + Tcl_DStringLength(&buf) + 1) = '\0';
+	Tcl_DStringSetLength(&buf, Tcl_DStringLength(&buf) + 1);
+	memcpy(namePtr, Tcl_DStringValue(&buf), Tcl_DStringLength(&buf) + 1);
 	Tcl_DStringFree(&buf);
 
 	handle = tclWinProcs->createFileProc((TCHAR *) name,
Index: ChangeLog
===================================================================
RCS file: /cvsroot/tcl/tcl/ChangeLog,v
retrieving revision 1.5225
diff -u -r1.5225 ChangeLog
--- ChangeLog	20 Sep 2010 14:28:15 -0000	1.5225
+++ ChangeLog	21 Sep 2010 09:34:35 -0000
@@ -1,3 +1,8 @@
+2010-09-21  Jan Nijtmans  <nijtmans@users.sf.net>
+
+	* win/tclWinFCmd.c: [Bug 3069278]: Breakage on head Windows triggered
+	* win/tclWinPipe.c: by install-tzdata.
+
 2010-09-20  Jan Nijtmans  <nijtmans@users.sf.net>
 
 	* win/tclWinFCmd.c: Eliminate tclWinProcs->useWide everywhere, since
