cameron314 added inline comments.

================
Comment at: lldb/trunk/source/Core/Disassembler.cpp:881
@@ -878,3 +880,3 @@
     }
-        
-    FILE *test_file = fopen (file_name, "r");
+    FILE *test_file = nullptr;
+#if _WIN32
----------------
zturner wrote:
> cameron314 wrote:
> > cameron314 wrote:
> > > zturner wrote:
> > > > Would LLDB's `File` class work here instead of using raw APIs?  I see 
> > > > you fixed the code in `lldb_private::File`, so perhaps simply using 
> > > > that class here instead of a `FILE*` would allow you to reuse the fix 
> > > > from that class.
> > > No idea. Probably :-) I'll look into it, and make this change if it's 
> > > trivial.
> > I don't trust myself to make this change without introducing a bug. But 
> > I'll get rid of the `#ifdef`.
> One possibility is to revert this portion of the patch (along with any other 
> changes that you don't feel comfortable making) back to their original state. 
>  This will still leave certain parts of unicode functionality broken, but it 
> would reduce the surface area of "things that might be wrong with the patch" 
> and give people a chance to make sure nothing else is seriously broken.  
> Then, we can do these other "more difficult" locations as a followup patch.  
> The nice thing about that is that if it does end up breaking something, and 
> we have to revert it, it doesn't revert 100% of the work towards getting 
> Unicode working, but only a couple of points.
This makes sense. I'm almost done with the next version of the patch, we'll see 
what should make the cut at that point.

================
Comment at: lldb/trunk/source/Host/common/FileSpec.cpp:1179
@@ +1178,3 @@
+
+            char child_path[PATH_MAX];
+            const int child_path_len = ::snprintf (child_path, 
sizeof(child_path), "%s\\%s", dir_path, fileName.c_str());
----------------
amccarth wrote:
> cameron314 wrote:
> > amccarth wrote:
> > > MAX_PATH in Windows.  (And someday, we should get rid of these fixed 
> > > buffers so we can use UNC paths.)
> > I absolutely agree re the fixed buffers. I'll try to make this change in 
> > all of the functions that can allocate dynamic memory.
> > 
> > `MAX_PATH` is not `PATH_MAX`, though -- `MAX_PATH` is a Win32 constant of 
> > 260, whereas `PATH_MAX` is an LLDB constant of 32K. (Actually PATH_MAX is 
> > defined in multiple places and was either that or MAX_PATH depending on 
> > which header was included, but mostly it was 32K so I changed them all to 
> > at least be consistently 32K.)
> Ah, I see.  I work in another code base where PATH_MAX is synonymous with 
> MAX_PATH, so I was confused.
> 
> Buffers of 32K characters on the stack seem like a bad idea.  We need a 
> vector or string or some other container that puts the bulk of the data 
> somewhere other than the stack.
Right. There's currently ~110 places in LLDB that allocate buffers of size 
`PATH_MAX` on the stack. Nearly all of those predate my patch, it seems.

================
Comment at: lldb/trunk/source/Host/windows/Windows.cpp:210
@@ +209,3 @@
+    wchar_t wpath[PATH_MAX];
+    if (wchar_t* wresult = _wgetcwd(wpath, PATH_MAX))
+    {
----------------
zturner wrote:
> cameron314 wrote:
> > zturner wrote:
> > > Why can't we just convert to the result of `_wgetcwd` directly to UTF8?
> > Not sure I understand. That's what this code does? There's a tad of extra 
> > logic needed because the `path` passed in is allowed to be `NULL`, 
> > indicating we should allocate a buffer for the caller.
> Ahh that extra logic is what I was referring to.  I wasn't aware of those 
> semantics of `getcwd`.  Can you add a comment explaining that, since it's not 
> obvious from looking at the code.
Haha, sure. I wasn't aware either, but it blew up at runtime since it turns out 
LLDB actually makes use of this when booting with a relative path.

================
Comment at: 
lldb/trunk/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp:1175
@@ -1166,1 +1174,3 @@
+    fp = _wfopen((const wchar_t *)wpath.data(), (const wchar_t *)wmode.data());
+#else
     fp = fopen(path, mode);
----------------
zturner wrote:
> cameron314 wrote:
> > zturner wrote:
> > > Here's another example of an #ifdef in common code that we will need to 
> > > do something about.  Is there a constructor of the `File` class that 
> > > takes a path and a mode?
> > There is, but the mode is an enum and not a string. I'll get rid of the 
> > `#ifdef`, though.
> We have a function somewhere that converts a mode string to the enum.  I 
> think it's in `File.h` or `File.cpp`.  Let me know if you can't find it.
You know, it turns out there's one right in this very file. Thanks!


Repository:
  rL LLVM

http://reviews.llvm.org/D17107



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to