[ELF] Don't replace path separators on *NIX.

Apparently this is wrong because it's legal to have a filename
on UNIX which contains a backslash.

Differential Revision:  https://reviews.llvm.org/D26734

llvm-svn: 287143
This commit is contained in:
Davide Italiano 2016-11-16 19:35:36 +00:00
parent 8301c645c8
commit c223d1bc6b
2 changed files with 11 additions and 0 deletions

View File

@ -53,7 +53,9 @@ static void writeMember(raw_fd_ostream &OS, StringRef Path, StringRef Data) {
// Converts path to use unix path separators so the cpio can be extracted on
// both unix and windows.
static void convertToUnixPathSeparator(SmallString<128> &Path) {
#ifdef LLVM_ON_WIN32
std::replace(Path.begin(), Path.end(), '\\', '/');
#endif
}
void CpioFile::append(StringRef Path, StringRef Data) {

View File

@ -0,0 +1,9 @@
# REQUIRES: x86, cpio, shell
# Test that we don't erroneously replace \ with / on UNIX, as it's
# legal for a filename to contain backslashes.
# RUN: llvm-mc %s -o foo\\.o -filetype=obj -triple=x86_64-pc-linux
# RUN: ld.lld foo\\.o --reproduce repro
# RUN: cpio -t < repro.cpio | FileCheck %s
# CHECK: repro/{{.*}}/foo\.o