From f7d1a07952d41af79fdbaf3f01cdb6941cf9c614 Mon Sep 17 00:00:00 2001 From: "Haoran.Wang" Date: Mon, 2 Mar 2020 22:13:07 +0800 Subject: [PATCH] fix some liblp file access for win32 The file accessing API in liblp don't work on win32. Add the O_BINARY to correct the file stream access. This patch follow the AOSP change 829979. Change-Id: I97180e2f07cacf109a86593b6a12975597552053 Signed-off-by: Haoran.Wang --- fs_mgr/liblp/images.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs_mgr/liblp/images.cpp b/fs_mgr/liblp/images.cpp index e4d92ca90..0b1e522d6 100644 --- a/fs_mgr/liblp/images.cpp +++ b/fs_mgr/liblp/images.cpp @@ -124,7 +124,7 @@ bool WriteToImageFile(borrowed_fd fd, const LpMetadata& input) { } bool WriteToImageFile(const std::string& file, const LpMetadata& input) { - unique_fd fd(open(file.c_str(), O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC, 0644)); + unique_fd fd(open(file.c_str(), O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC | O_BINARY, 0644)); if (fd < 0) { PERROR << __PRETTY_FUNCTION__ << " open failed: " << file; return false; @@ -184,7 +184,7 @@ bool ImageBuilder::IsValid() const { } bool ImageBuilder::Export(const std::string& file) { - unique_fd fd(open(file.c_str(), O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC, 0644)); + unique_fd fd(open(file.c_str(), O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC | O_BINARY, 0644)); if (fd < 0) { PERROR << "open failed: " << file; return false; @@ -208,7 +208,7 @@ bool ImageBuilder::ExportFiles(const std::string& output_dir) { std::string file_name = "super_" + name + ".img"; std::string file_path = output_dir + "/" + file_name; - static const int kOpenFlags = O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC | O_NOFOLLOW; + static const int kOpenFlags = O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC | O_NOFOLLOW | O_BINARY; unique_fd fd(open(file_path.c_str(), kOpenFlags, 0644)); if (fd < 0) { PERROR << "open failed: " << file_path; @@ -443,7 +443,7 @@ bool ImageBuilder::CheckExtentOrdering() { } int ImageBuilder::OpenImageFile(const std::string& file) { - android::base::unique_fd source_fd = GetControlFileOrOpen(file.c_str(), O_RDONLY | O_CLOEXEC); + unique_fd source_fd = GetControlFileOrOpen(file.c_str(), O_RDONLY | O_CLOEXEC | O_BINARY); if (source_fd < 0) { PERROR << "open image file failed: " << file; return -1;