From be2d5ae0d34e4bd6f7796776546b3adbcaab0618 Mon Sep 17 00:00:00 2001 From: Michael Hoisie Date: Thu, 14 Mar 2024 20:32:08 +0000 Subject: Use MappedFile in android_database_SQLiteConnection By using MappedFile, android_database_SQLiteConnection can compile on all host platforms, including Windows. Also, MappedFile automatically munmap's the memory region when it goes out of scope. Test: Robolectric SQLiteDatabaseTest on Windows Bug: 317884162 Change-Id: I535449c296e0a6fa0b3c16516de11efbf9623e59 --- core/jni/android_database_SQLiteConnection.cpp | 32 +++++++++++--------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp index 8f7026859898..46590a947eda 100644 --- a/core/jni/android_database_SQLiteConnection.cpp +++ b/core/jni/android_database_SQLiteConnection.cpp @@ -16,27 +16,22 @@ #define LOG_TAG "SQLiteConnection" -#include -#include +#include #include #include - -#include -#include -#include -#include -#include - -#include -#include - #include - +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include "android_database_SQLiteCommon.h" - #include "core_jni_helpers.h" // Set to 1 to use UTF16 storage for localized indexes. @@ -649,13 +644,14 @@ static int createAshmemRegionWithData(JNIEnv* env, const void* data, size_t leng ALOGE("ashmem_create_region failed: %s", strerror(error)); } else { if (length > 0) { - void* ptr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (ptr == MAP_FAILED) { + std::unique_ptr mappedFile = + base::MappedFile::FromFd(fd, 0, length, PROT_READ | PROT_WRITE); + if (mappedFile == nullptr) { error = errno; ALOGE("mmap failed: %s", strerror(error)); } else { - memcpy(ptr, data, length); - munmap(ptr, length); + memcpy(mappedFile->data(), data, length); + mappedFile.reset(); } } -- cgit v1.2.3-59-g8ed1b