forked from OSchip/llvm-project
Replace std::ofstream with llvm::raw_fd_ostream
Summary: ofstream does not handle paths with non-ascii characters correctly on windows, so I am switching these to llvm streams to fix that. Reviewers: zturner, eugene Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D31079 llvm-svn: 298375
This commit is contained in:
parent
1593086232
commit
e3ad2e2e73
|
@ -402,13 +402,14 @@ Error AdbClient::ShellToFile(const char *command, milliseconds timeout,
|
|||
return error;
|
||||
|
||||
const auto output_filename = output_file_spec.GetPath();
|
||||
std::ofstream dst(output_filename, std::ios::out | std::ios::binary);
|
||||
if (!dst.is_open())
|
||||
std::error_code EC;
|
||||
llvm::raw_fd_ostream dst(output_filename, EC, llvm::sys::fs::F_None);
|
||||
if (EC)
|
||||
return Error("Unable to open local file %s", output_filename.c_str());
|
||||
|
||||
dst.write(&output_buffer[0], output_buffer.size());
|
||||
dst.close();
|
||||
if (!dst)
|
||||
if (dst.has_error())
|
||||
return Error("Failed to write file %s", output_filename.c_str());
|
||||
return Error();
|
||||
}
|
||||
|
@ -428,8 +429,9 @@ Error AdbClient::SyncService::internalPullFile(const FileSpec &remote_file,
|
|||
const auto local_file_path = local_file.GetPath();
|
||||
llvm::FileRemover local_file_remover(local_file_path);
|
||||
|
||||
std::ofstream dst(local_file_path, std::ios::out | std::ios::binary);
|
||||
if (!dst.is_open())
|
||||
std::error_code EC;
|
||||
llvm::raw_fd_ostream dst(local_file_path, EC, llvm::sys::fs::F_None);
|
||||
if (EC)
|
||||
return Error("Unable to open local file %s", local_file_path.c_str());
|
||||
|
||||
const auto remote_file_path = remote_file.GetPath(false);
|
||||
|
@ -447,6 +449,9 @@ Error AdbClient::SyncService::internalPullFile(const FileSpec &remote_file,
|
|||
if (!eof)
|
||||
dst.write(&chunk[0], chunk.size());
|
||||
}
|
||||
dst.close();
|
||||
if (dst.has_error())
|
||||
return Error("Failed to write file %s", local_file_path.c_str());
|
||||
|
||||
local_file_remover.releaseFile();
|
||||
return error;
|
||||
|
|
|
@ -1645,8 +1645,9 @@ Error Platform::DownloadModuleSlice(const FileSpec &src_file_spec,
|
|||
const FileSpec &dst_file_spec) {
|
||||
Error error;
|
||||
|
||||
std::ofstream dst(dst_file_spec.GetPath(), std::ios::out | std::ios::binary);
|
||||
if (!dst.is_open()) {
|
||||
std::error_code EC;
|
||||
llvm::raw_fd_ostream dst(dst_file_spec.GetPath(), EC, llvm::sys::fs::F_None);
|
||||
if (EC) {
|
||||
error.SetErrorStringWithFormat("unable to open destination file: %s",
|
||||
dst_file_spec.GetPath().c_str());
|
||||
return error;
|
||||
|
|
|
@ -106,23 +106,25 @@ static Error save_socket_id_to_file(const std::string &socket_id,
|
|||
return Error("Failed to create directory %s: %s",
|
||||
temp_file_spec.GetCString(), error.AsCString());
|
||||
|
||||
llvm::SmallString<PATH_MAX> temp_file_path;
|
||||
llvm::SmallString<64> temp_file_path;
|
||||
temp_file_spec.AppendPathComponent("port-file.%%%%%%");
|
||||
auto err_code = llvm::sys::fs::createUniqueFile(temp_file_spec.GetCString(),
|
||||
int FD;
|
||||
auto err_code = llvm::sys::fs::createUniqueFile(temp_file_spec.GetPath(), FD,
|
||||
temp_file_path);
|
||||
if (err_code)
|
||||
return Error("Failed to create temp file: %s", err_code.message().c_str());
|
||||
|
||||
llvm::FileRemover tmp_file_remover(temp_file_path.c_str());
|
||||
llvm::FileRemover tmp_file_remover(temp_file_path);
|
||||
|
||||
{
|
||||
std::ofstream temp_file(temp_file_path.c_str(), std::ios::out);
|
||||
if (!temp_file.is_open())
|
||||
return Error("Failed to open temp file %s", temp_file_path.c_str());
|
||||
llvm::raw_fd_ostream temp_file(FD, true);
|
||||
temp_file << socket_id;
|
||||
temp_file.close();
|
||||
if (temp_file.has_error())
|
||||
return Error("Failed to write to port file.");
|
||||
}
|
||||
|
||||
err_code = llvm::sys::fs::rename(temp_file_path.c_str(), file_spec.GetPath());
|
||||
err_code = llvm::sys::fs::rename(temp_file_path, file_spec.GetPath());
|
||||
if (err_code)
|
||||
return Error("Failed to rename file %s to %s: %s", temp_file_path.c_str(),
|
||||
file_spec.GetPath().c_str(), err_code.message().c_str());
|
||||
|
|
Loading…
Reference in New Issue