diff options
Diffstat (limited to 'libutils/FileMap.cpp')
-rw-r--r-- | libutils/FileMap.cpp | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/libutils/FileMap.cpp b/libutils/FileMap.cpp index 5feb2aa76..1202c156d 100644 --- a/libutils/FileMap.cpp +++ b/libutils/FileMap.cpp @@ -174,12 +174,6 @@ bool FileMap::create(const char* origFileName, int fd, off64_t offset, size_t le return false; } #else // !defined(__MINGW32__) - int prot, flags, adjust; - off64_t adjOffset; - size_t adjLength; - - void* ptr; - assert(fd >= 0); assert(offset >= 0); assert(length > 0); @@ -193,20 +187,23 @@ bool FileMap::create(const char* origFileName, int fd, off64_t offset, size_t le } } - adjust = offset % mPageSize; - adjOffset = offset - adjust; - adjLength = length + adjust; + int adjust = offset % mPageSize; + off64_t adjOffset = offset - adjust; + size_t adjLength = length + adjust; - flags = MAP_SHARED; - prot = PROT_READ; - if (!readOnly) - prot |= PROT_WRITE; + int flags = MAP_SHARED; + int prot = PROT_READ; + if (!readOnly) prot |= PROT_WRITE; - ptr = mmap(nullptr, adjLength, prot, flags, fd, adjOffset); + void* ptr = mmap(nullptr, adjLength, prot, flags, fd, adjOffset); if (ptr == MAP_FAILED) { - ALOGE("mmap(%lld,%zu) failed: %s\n", - (long long)adjOffset, adjLength, strerror(errno)); - return false; + if (errno == EINVAL && length == 0) { + ptr = nullptr; + adjust = 0; + } else { + ALOGE("mmap(%lld,%zu) failed: %s\n", (long long)adjOffset, adjLength, strerror(errno)); + return false; + } } mBasePtr = ptr; #endif // !defined(__MINGW32__) @@ -217,8 +214,6 @@ bool FileMap::create(const char* origFileName, int fd, off64_t offset, size_t le mDataPtr = (char*) mBasePtr + adjust; mDataLength = length; - assert(mBasePtr != NULL); - ALOGV("MAP: base %p/%zu data %p/%zu\n", mBasePtr, mBaseLength, mDataPtr, mDataLength); |