From 8c4fc35ecbd51cd669adbf7b37bfd8667821f001 Mon Sep 17 00:00:00 2001
From: Corinna Vinschen <corinna@vinschen.de>
Date: Wed, 2 Apr 2008 10:34:17 +0000
Subject: [PATCH] 	* dcrt0.cc (insert_file): Convert filename to WCHAR
 and call 	CreateFileW to allow UTF-8 filenames.

---
 winsup/cygwin/ChangeLog |  5 +++++
 winsup/cygwin/dcrt0.cc  | 18 +++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index dfe389736..8251cdcb4 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-02  Corinna Vinschen  <corinna@vinschen.de>
+
+	* dcrt0.cc (insert_file): Convert filename to WCHAR and call
+	CreateFileW to allow UTF-8 filenames.
+
 2008-04-01  Corinna Vinschen  <corinna@vinschen.de>
 
 	* Fix copyright dates.
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 7461b04aa..cd2ac1eae 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -39,6 +39,7 @@ details. */
 #include "sync.h"
 #include "heap.h"
 #include "environ.h"
+#include "tls_pbuf.h"
 
 #define MAX_AT_FILE_LEVEL 10
 
@@ -161,14 +162,17 @@ insert_file (char *name, char *&cmd)
 {
   HANDLE f;
   DWORD size;
+  tmp_pathbuf tp;
 
-  f = CreateFile (name + 1,
-		  GENERIC_READ,		 /* open for reading	*/
-		  FILE_SHARE_READ,       /* share for reading	*/
-		  &sec_none_nih,	 /* no security		*/
-		  OPEN_EXISTING,	 /* existing file only	*/
-		  FILE_ATTRIBUTE_NORMAL, /* normal file		*/
-		  NULL);		 /* no attr. template	*/
+  PWCHAR wname = tp.w_get ();
+  sys_mbstowcs (wname, NT_MAX_PATH + 1, name + 1);
+  f = CreateFileW (wname,
+		   GENERIC_READ,	 /* open for reading	*/
+		   FILE_SHARE_READ,      /* share for reading	*/
+		   &sec_none_nih,	 /* default security	*/
+		   OPEN_EXISTING,	 /* existing file only	*/
+		   FILE_ATTRIBUTE_NORMAL,/* normal file		*/
+		   NULL);		 /* no attr. template	*/
 
   if (f == INVALID_HANDLE_VALUE)
     {