Revert "Use MappedFile for mmap-related operations in CursorWindow"
This reverts commit e28dd9f756fd7df72e39260e82a7569a3636d0af.
Reason for revert: Breaks STS
Bug: 372629475
Change-Id: I708ac6e193b1b4cc0adfc0875e075fe5fd5d7191
diff --git a/libs/androidfw/CursorWindow.cpp b/libs/androidfw/CursorWindow.cpp
index cbb1e8f..5e645cc 100644
--- a/libs/androidfw/CursorWindow.cpp
+++ b/libs/androidfw/CursorWindow.cpp
@@ -18,11 +18,10 @@
#include <androidfw/CursorWindow.h>
-#include "android-base/logging.h"
-#include "android-base/mapped_file.h"
-#include "cutils/ashmem.h"
+#include <sys/mman.h>
-using android::base::MappedFile;
+#include "android-base/logging.h"
+#include "cutils/ashmem.h"
namespace android {
@@ -40,7 +39,7 @@
CursorWindow::~CursorWindow() {
if (mAshmemFd != -1) {
- mMappedFile.reset();
+ ::munmap(mData, mSize);
::close(mAshmemFd);
} else {
free(mData);
@@ -76,7 +75,6 @@
status_t CursorWindow::maybeInflate() {
int ashmemFd = 0;
void* newData = nullptr;
- std::unique_ptr<MappedFile> mappedFile;
// Bail early when we can't expand any further
if (mReadOnly || mSize == mInflatedSize) {
@@ -97,12 +95,11 @@
goto fail_silent;
}
- mappedFile = MappedFile::FromFd(ashmemFd, 0, mInflatedSize, PROT_READ | PROT_WRITE);
- if (mappedFile == nullptr) {
+ newData = ::mmap(nullptr, mInflatedSize, PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFd, 0);
+ if (newData == MAP_FAILED) {
PLOG(ERROR) << "Failed mmap";
goto fail_silent;
}
- newData = mappedFile->data();
if (ashmem_set_prot_region(ashmemFd, PROT_READ) < 0) {
PLOG(ERROR) << "Failed ashmem_set_prot_region";
@@ -123,7 +120,6 @@
mData = newData;
mSize = mInflatedSize;
mSlotsOffset = newSlotsOffset;
- mMappedFile = std::move(mappedFile);
updateSlotsData();
}
@@ -134,7 +130,7 @@
fail:
LOG(ERROR) << "Failed maybeInflate";
fail_silent:
- mappedFile.reset();
+ ::munmap(newData, mInflatedSize);
::close(ashmemFd);
return UNKNOWN_ERROR;
}
@@ -171,12 +167,11 @@
goto fail_silent;
}
- window->mMappedFile = MappedFile::FromFd(window->mAshmemFd, 0, window->mSize, PROT_READ);
- if (window->mMappedFile == nullptr) {
+ window->mData = ::mmap(nullptr, window->mSize, PROT_READ, MAP_SHARED, window->mAshmemFd, 0);
+ if (window->mData == MAP_FAILED) {
PLOG(ERROR) << "Failed mmap";
goto fail_silent;
}
- window->mData = window->mMappedFile->data();
} else {
window->mAshmemFd = -1;