mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-26 07:56:43 +00:00
Define sys::path::convert_to_slash
This patch moves convertToUnixPathSeparator from LLD to LLVM. Differential Revision: https://reviews.llvm.org/D28444 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8839e0c240
commit
d9a8ccc226
@ -207,6 +207,14 @@ void native(const Twine &path, SmallVectorImpl<char> &result);
|
||||
/// @param path A path that is transformed to native format.
|
||||
void native(SmallVectorImpl<char> &path);
|
||||
|
||||
/// @brief Replaces backslashes with slashes if Windows.
|
||||
///
|
||||
/// @param path processed path
|
||||
/// @result The result of replacing backslashes with forward slashes if Windows.
|
||||
/// On Unix, this function is a no-op because backslashes are valid path
|
||||
/// chracters.
|
||||
std::string convert_to_slash(StringRef path);
|
||||
|
||||
/// @}
|
||||
/// @name Lexical Observers
|
||||
/// @{
|
||||
|
@ -571,6 +571,16 @@ void native(SmallVectorImpl<char> &Path) {
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string convert_to_slash(StringRef path) {
|
||||
#ifdef LLVM_ON_WIN32
|
||||
std::string s = path.str();
|
||||
std::replace(s.begin(), s.end(), '\\', '/');
|
||||
return s;
|
||||
#else
|
||||
return path;
|
||||
#endif
|
||||
}
|
||||
|
||||
StringRef filename(StringRef path) {
|
||||
return *rbegin(path);
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
@ -147,15 +148,6 @@ static void writeUstarHeader(raw_fd_ostream &OS, StringRef Path, size_t Size) {
|
||||
OS << StringRef(reinterpret_cast<char *>(&Hdr), sizeof(Hdr));
|
||||
}
|
||||
|
||||
// We want to use '/' as a path separator even on Windows.
|
||||
// This function canonicalizes a given path.
|
||||
static std::string canonicalize(std::string S) {
|
||||
#ifdef LLVM_ON_WIN32
|
||||
std::replace(S.begin(), S.end(), '\\', '/');
|
||||
#endif
|
||||
return S;
|
||||
}
|
||||
|
||||
// Creates a TarWriter instance and returns it.
|
||||
Expected<std::unique_ptr<TarWriter>> TarWriter::create(StringRef OutputPath,
|
||||
StringRef BaseDir) {
|
||||
@ -171,7 +163,7 @@ TarWriter::TarWriter(int FD, StringRef BaseDir)
|
||||
// Append a given file to an archive.
|
||||
void TarWriter::append(StringRef Path, StringRef Data) {
|
||||
// Write Path and Data.
|
||||
std::string S = BaseDir + "/" + canonicalize(Path) + "\0";
|
||||
std::string S = BaseDir + "/" + sys::path::convert_to_slash(Path) + "\0";
|
||||
if (fitsInUstar(S)) {
|
||||
writeUstarHeader(OS, S, Data.size());
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user