Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f959fffc authored by Yifan Hong's avatar Yifan Hong Committed by Gerrit Code Review
Browse files

Merge changes from topic "lpdumpd"

* changes:
  libbase: realpath is wrapped with TEMP_FAILURE_RETRY
  liblp: Replace open with GetControlFileOrOpen
  init: expand prop in 'file'
  libcutils: android_get_control_file uses realpath.
parents eac1220f 5f4cb8a2
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -385,7 +385,12 @@ bool Readlink(const std::string& path, std::string* result) {
bool Realpath(const std::string& path, std::string* result) {
  result->clear();

  char* realpath_buf = realpath(path.c_str(), nullptr);
  // realpath may exit with EINTR. Retry if so.
  char* realpath_buf = nullptr;
  do {
    realpath_buf = realpath(path.c_str(), nullptr);
  } while (realpath_buf == nullptr && errno == EINTR);

  if (realpath_buf == nullptr) {
    return false;
  }
+5 −0
Original line number Diff line number Diff line
@@ -43,6 +43,11 @@ cc_library {
        windows: {
            enabled: true,
        },
        android: {
            shared_libs: [
                "libcutils",
            ],
        },
    },
    export_include_dirs: ["include"],
}
+2 −2
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ std::unique_ptr<LpMetadata> ReadFromImageBlob(const void* data, size_t bytes) {
}

std::unique_ptr<LpMetadata> ReadFromImageFile(const std::string& image_file) {
    unique_fd fd(open(image_file.c_str(), O_RDONLY | O_CLOEXEC));
    unique_fd fd = GetControlFileOrOpen(image_file.c_str(), O_RDONLY | O_CLOEXEC);
    if (fd < 0) {
        PERROR << __PRETTY_FUNCTION__ << " open failed: " << image_file;
        return nullptr;
@@ -408,7 +408,7 @@ bool SparseBuilder::CheckExtentOrdering() {
}

int SparseBuilder::OpenImageFile(const std::string& file) {
    android::base::unique_fd source_fd(open(file.c_str(), O_RDONLY | O_CLOEXEC));
    android::base::unique_fd source_fd = GetControlFileOrOpen(file.c_str(), O_RDONLY | O_CLOEXEC);
    if (source_fd < 0) {
        PERROR << "open image file failed: " << file;
        return -1;
+2 −2
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ std::string GetPartitionAbsolutePath(const std::string& path) {

bool GetBlockDeviceInfo(const std::string& block_device, BlockDeviceInfo* device_info) {
#if defined(__linux__)
    unique_fd fd(open(block_device.c_str(), O_RDONLY));
    unique_fd fd = GetControlFileOrOpen(block_device.c_str(), O_RDONLY);
    if (fd < 0) {
        PERROR << __PRETTY_FUNCTION__ << "open '" << block_device << "' failed";
        return false;
@@ -85,7 +85,7 @@ bool GetBlockDeviceInfo(const std::string& block_device, BlockDeviceInfo* device

unique_fd PartitionOpener::Open(const std::string& partition_name, int flags) const {
    std::string path = GetPartitionAbsolutePath(partition_name);
    return unique_fd{open(path.c_str(), flags | O_CLOEXEC)};
    return GetControlFileOrOpen(path.c_str(), flags | O_CLOEXEC);
}

bool PartitionOpener::GetInfo(const std::string& partition_name, BlockDeviceInfo* info) const {
+18 −0
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@
#include <ext4_utils/ext4_utils.h>
#include <openssl/sha.h>

#ifdef __ANDROID__
#include <cutils/android_get_control_file.h>
#endif

#include "utility.h"

namespace android {
@@ -171,5 +175,19 @@ bool SetBlockReadonly(int fd, bool readonly) {
#endif
}

base::unique_fd GetControlFileOrOpen(const char* path, int flags) {
#if defined(__ANDROID__)
    int fd = android_get_control_file(path);
    if (fd >= 0) {
        int newfd = TEMP_FAILURE_RETRY(dup(fd));
        if (newfd >= 0) {
            return base::unique_fd(newfd);
        }
        PERROR << "Cannot dup fd for already controlled file: " << path << ", reopening...";
    }
#endif
    return base::unique_fd(open(path, flags));
}

}  // namespace fs_mgr
}  // namespace android
Loading