فهرست منبع

fixed mmap failure check with MAP_FAILED flag

suzker 9 سال پیش
والد
کامیت
fa43431974
1فایلهای تغییر یافته به همراه7 افزوده شده و 3 حذف شده
  1. 7 3
      src/AbstractDiskWriter.cc

+ 7 - 3
src/AbstractDiskWriter.cc

@@ -398,10 +398,14 @@ void AbstractDiskWriter::ensureMmapWrite(size_t len, int64_t offset)
           errNum = GetLastError();
         }
 #else  // !__MINGW32__
-        mapaddr_ = reinterpret_cast<unsigned char*>(mmap(
-            nullptr, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd_, 0));
-        if (!mapaddr_) {
+        void * pa = mmap(nullptr, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd_, 0);
+
+        if (pa == MAP_FAILED) {
           errNum = errno;
+          mapaddr_ = nullptr;
+        }
+        else {
+          mapaddr_ = reinterpret_cast<unsigned char*>(pa);
         }
 #endif // !__MINGW32__
         if (mapaddr_) {