I spent some more time on this. My idea was to use functionality from llvm::sys::fs like file_status instead of stat struct, but as it turns out this is not really possible. file_status structure is not a replacement for stat, nor are there functions inside llvm::sys::fs that can replace calls to ::stat and ::open.<div>

<br></div><div>The only solution I can see is to create wrappers around ::stat, ::open, etc. and use them in the codebase instead of direct calls. Unix implementation would only forward calls to the right function. Windows implementation would convert path from utf8 to utf16 and call the appropriate function (::_wopen instead of ::open and so on). Is this solution acceptable?</div>

<div><br></div><div>Here's a patch where I tried this (it has a number of issues but I'd like to hear from someone that this solution makes sense before I try to address them).  </div><div><br><div class="gmail_quote">

On Wed, Sep 7, 2011 at 9:39 AM, Eli Friedman <span dir="ltr"><<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">On Wed, Sep 7, 2011 at 12:20 AM, Nikola Smiljanic <<a href="mailto:popizdeh@gmail.com">popizdeh@gmail.com</a>> wrote:<br>
> So what are you exactly saying? Somebody proposed using GetCommandLine<br>
> instead of using argv directly. And what about my other points about ::open<br>
> and ::stat?<br>
<br>
</div>Because of the way Windows works, the only fully correct solution is<br>
to never touch the native charset, and keep everything in UTF-8/16 all<br>
the time.  Anything else is going to lead to bugs like "clang fails to<br>
find my file in a directory whose name has a Greek letter in it".  If<br>
we're going to be spending time messing with this code, we should take<br>
the time to get it right.  If it requires some extra refactoring to<br>
make that work, that's acceptable...<br>
<font color="#888888"><br>
-Eli<br>
</font><div><div></div><div class="h5"><br>
> On Wed, Sep 7, 2011 at 8:52 AM, Eli Friedman <<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>> wrote:<br>
>><br>
>> On Tue, Sep 6, 2011 at 11:28 PM, Nikola Smiljanic <<a href="mailto:popizdeh@gmail.com">popizdeh@gmail.com</a>><br>
>> wrote:<br>
>> > The problem is not in the functions that return multibyte strings (the<br>
>> > multibyte string is coming from argv)<br>
>><br>
>> argv is implicitly the return from a UTF16->multibyte conversion (i.e.<br>
>> it's lossy).<br>
>><br>
>> -Eli<br>
><br>
><br>
</div></div></blockquote></div><br></div>