[PATCH] Fix hardcoded path seperator in two code locations
Yaron Keren
yaron.keren at gmail.com
Fri May 9 03:53:08 PDT 2014
In the discussion linked, Reid mentioned that when cross-compiling aren't
the paths are valid on the host only, so shouldn't the host path seperator
be used? the target may not even have a file system.
The alternative is to have all path seperators as '/', but this disagrees
with path.cpp functionality and all its many clients.
Alp, is that whan you meant?
2014-05-09 13:21 GMT+03:00 Alp Toker <alp at nuanti.com>:
>
> On 09/05/2014 10:32, Yaron Keren wrote:
>
>> Hi echristo, rnk, chapuni,
>>
>> Earlier duscussion:
>> https://www.mail-archive.com/cfe-commits@cs.uiuc.edu/msg92891.html
>>
>> Most of LLVM code uses the llvm::sys::path::append function to
>> concatenate paths and will get the correct native slash. In some code
>> locations it seems that direct string concatenation was used, possibly
>> because the code writer knows there are no extra path sepeartors to deal
>> with, so string concat was more efficient than append.
>>
>> In the locations below, the path seperator is hardcoded as '/'. Fixed by
>> exposing the native seperator from llvm::sys:;path and using it.
>>
>> As an alternative, the append function could be used but it's more code
>> and less efficient.
>>
>> http://reviews.llvm.org/D3687
>>
>> Files:
>> include/llvm/Support/Path.h
>> lib/MC/MCDwarf.cpp
>> lib/Support/Path.cpp
>> lib/Support/SourceMgr.cpp
>>
>> Index: include/llvm/Support/Path.h
>> ===================================================================
>> --- include/llvm/Support/Path.h
>> +++ include/llvm/Support/Path.h
>> @@ -295,6 +295,11 @@
>> /// @result true if \a value is a path separator character on the host
>> OS
>> bool is_separator(char value);
>> +/// @brief Return the preferred separator for this platform.
>> +///
>> +/// @result const char* to the preferred separator, null-terminated.
>> +const char *get_separator();
>> +
>> /// @brief Get the typical temporary directory for the system, e.g.,
>> /// "/var/tmp" or "C:/TEMP"
>> ///
>> Index: lib/Support/Path.cpp
>> ===================================================================
>> --- lib/Support/Path.cpp
>> +++ lib/Support/Path.cpp
>> @@ -569,6 +569,12 @@
>> }
>> }
>> +static const char preferred_separator_string[] = {
>> preferred_separator, '\0' };
>> +
>> +const char *get_separator() {
>> + return preferred_separator_string;
>> +}
>> +
>> void system_temp_directory(bool erasedOnReboot, SmallVectorImpl<char>
>> &result) {
>> result.clear();
>> Index: lib/MC/MCDwarf.cpp
>> ===================================================================
>> --- lib/MC/MCDwarf.cpp
>> +++ lib/MC/MCDwarf.cpp
>> @@ -689,7 +689,7 @@
>> const SmallVectorImpl<std::string> &MCDwarfDirs =
>> context.getMCDwarfDirs();
>> if (MCDwarfDirs.size() > 0) {
>> MCOS->EmitBytes(MCDwarfDirs[0]);
>> - MCOS->EmitBytes("/");
>> + MCOS->EmitBytes(sys::path::get_separator());
>> }
>> const SmallVectorImpl<MCDwarfFile> &MCDwarfFiles =
>> MCOS->getContext().getMCDwarfFiles();
>>
>
> I know there isn't much clarity yet on the issue but it's worth mentioning
> (in the commit message or a comment) the current state of affairs regarding
> paths in cross-compiled debug info.
>
> Alp.
>
>
>
> Index: lib/Support/SourceMgr.cpp
>> ===================================================================
>> --- lib/Support/SourceMgr.cpp
>> +++ lib/Support/SourceMgr.cpp
>> @@ -18,6 +18,7 @@
>> #include "llvm/ADT/Twine.h"
>> #include "llvm/Support/Locale.h"
>> #include "llvm/Support/MemoryBuffer.h"
>> +#include "llvm/Support/Path.h"
>> #include "llvm/Support/raw_ostream.h"
>> #include "llvm/Support/system_error.h"
>> using namespace llvm;
>> @@ -60,7 +61,7 @@
>> // If the file didn't exist directly, see if it's in an include
>> path.
>> for (unsigned i = 0, e = IncludeDirectories.size(); i != e &&
>> !NewBuf; ++i) {
>> - IncludedFile = IncludeDirectories[i] + "/" + Filename;
>> + IncludedFile = IncludeDirectories[i] + sys::path::get_separator() +
>> Filename;
>> MemoryBuffer::getFile(IncludedFile.c_str(), NewBuf);
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
> --
> http://www.nuanti.com
> the browser experts
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140509/053f7aee/attachment.html>
More information about the llvm-commits
mailing list