From f073896133731d086a2b75153ba22cdbbe08e5d6 Mon Sep 17 00:00:00 2001 From: huangyu Date: Mon, 9 Jan 2023 14:08:33 +0800 Subject: [PATCH] fixed 7ba3725 from https://gitee.com/huangyu76/arkcompiler_ets_frontend/pulls/776 Fix failed to operate file of length over 260 issue on Windows Signed-off-by: huangyu Change-Id: I92855d7cbf25659457303a0565b85ea2b53d63d2 --- merge_abc/src/protobufSnapshotGenerator.cpp | 25 +++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/merge_abc/src/protobufSnapshotGenerator.cpp b/merge_abc/src/protobufSnapshotGenerator.cpp index daeee4716cf..1197bf59811 100644 --- a/merge_abc/src/protobufSnapshotGenerator.cpp +++ b/merge_abc/src/protobufSnapshotGenerator.cpp @@ -18,13 +18,27 @@ #include "protobufSnapshotGenerator.h" namespace panda::proto { +static void GetFileStream(const std::string &path, std::ios::openmode mode, std::fstream &fs) +{ +#ifdef PANDA_TARGET_WINDOWS + if (path.length() < _MAX_PATH) { + fs = std::fstream(path, mode); + } else { + fs = std::fstream(panda::os::file::File::GetExtendedLengthStylePath(path), mode); + } +#else + fs = std::fstream(path, mode); +#endif // PANDA_TARGET_WINDOWS +} + void ProtobufSnapshotGenerator::GenerateSnapshot(const panda::pandasm::Program &program, const std::string &outputName) { protoPanda::Program protoProgram; Program::Serialize(program, protoProgram); - std::fstream output(outputName, std::ios::out | std::ios::trunc | std::ios::binary); + std::fstream output; + GetFileStream(outputName, std::ios::out | std::ios::trunc | std::ios::binary, output); if (!output) { std::cerr << "Failed to create: " << outputName << std::endl; return; @@ -36,7 +50,8 @@ void ProtobufSnapshotGenerator::GenerateSnapshot(const panda::pandasm::Program & void ProtobufSnapshotGenerator::GenerateProgram(const std::string &inputName, panda::pandasm::Program &prog, panda::ArenaAllocator *allocator) { - std::fstream input(inputName, std::ios::in | std::ios::binary); + std::fstream input; + GetFileStream(inputName, std::ios::in | std::ios::binary, input); if (!input) { std::cerr << "Failed to open: " << inputName << std::endl; return; @@ -55,7 +70,8 @@ void ProtobufSnapshotGenerator::UpdateCacheFile( { protoPanda::CompositeProgram protoCompositeProgram; CompositeProgram::Serialize(compositeProgramMap, isDebug, protoCompositeProgram); - std::fstream output(cacheFilePath, std::ios::out | std::ios::trunc | std::ios::binary); + std::fstream output; + GetFileStream(cacheFilePath, std::ios::out | std::ios::trunc | std::ios::binary, output); if (!output) { std::cerr << "Failed to create cache file: " << cacheFilePath << std::endl; return; @@ -67,7 +83,8 @@ void ProtobufSnapshotGenerator::UpdateCacheFile( std::map *ProtobufSnapshotGenerator::GetCacheContext( const std::string &cacheFilePath, bool isDebug, panda::ArenaAllocator *allocator) { - std::fstream input(cacheFilePath, std::ios::in | std::ios::binary); + std::fstream input; + GetFileStream(cacheFilePath, std::ios::in | std::ios::binary, input); if (!input) { std::cerr << "Cache file: " << cacheFilePath << " doesn't exist" << std::endl; return nullptr; -- Gitee