Merge 9d54db9c4477d8e9b2c8bf897e700236666cbe1c into 8b6b7d878c89e81614d05edca7936de41ccdd2da

This commit is contained in:
Oliver Schönrock 2025-01-14 16:49:59 -06:00 committed by GitHub
commit 0cbb19167d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 18 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.8) cmake_minimum_required(VERSION 3.10)
# #
# Here we check whether mio is being configured in isolation or as a component # Here we check whether mio is being configured in isolation or as a component

View File

@ -21,11 +21,12 @@
#ifndef MIO_BASIC_MMAP_IMPL #ifndef MIO_BASIC_MMAP_IMPL
#define MIO_BASIC_MMAP_IMPL #define MIO_BASIC_MMAP_IMPL
#include "mio/mmap.hpp"
#include "mio/page.hpp" #include "mio/page.hpp"
#include "mio/detail/string_util.hpp" #include "mio/detail/string_util.hpp"
#include <algorithm> #include <algorithm>
#include <cstddef>
#include <cstdint>
#ifndef _WIN32 #ifndef _WIN32
# include <unistd.h> # include <unistd.h>
@ -43,13 +44,13 @@ namespace win {
/** Returns the 4 upper bytes of an 8-byte integer. */ /** Returns the 4 upper bytes of an 8-byte integer. */
inline DWORD int64_high(int64_t n) noexcept inline DWORD int64_high(int64_t n) noexcept
{ {
return n >> 32; return static_cast<DWORD>(n >> 32);
} }
/** Returns the 4 lower bytes of an 8-byte integer. */ /** Returns the 4 lower bytes of an 8-byte integer. */
inline DWORD int64_low(int64_t n) noexcept inline DWORD int64_low(int64_t n) noexcept
{ {
return n & 0xffffffff; return static_cast<DWORD>(n & 0xffffffff);
} }
inline std::wstring s_2_ws(const std::string& s) inline std::wstring s_2_ws(const std::string& s)
@ -60,7 +61,7 @@ inline std::wstring s_2_ws(const std::string& s)
ret.resize(s.size()); ret.resize(s.size());
int wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), int wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(),
static_cast<int>(s.size()), &ret[0], static_cast<int>(s.size())); static_cast<int>(s.size()), &ret[0], static_cast<int>(s.size()));
ret.resize(wide_char_count); ret.resize(static_cast<std::size_t>(wide_char_count));
} }
return ret; return ret;
} }
@ -107,7 +108,7 @@ inline std::error_code last_error() noexcept
{ {
std::error_code error; std::error_code error;
#ifdef _WIN32 #ifdef _WIN32
error.assign(GetLastError(), std::system_category()); error.assign(static_cast<int>(GetLastError()), std::system_category());
#else #else
error.assign(errno, std::system_category()); error.assign(errno, std::system_category());
#endif #endif
@ -147,7 +148,7 @@ inline size_t query_file_size(file_handle_type handle, std::error_code& error)
error = detail::last_error(); error = detail::last_error();
return 0; return 0;
} }
return static_cast<int64_t>(file_size.QuadPart); return static_cast<size_t>(file_size.QuadPart);
#else // POSIX #else // POSIX
struct stat sbuf; struct stat sbuf;
if(::fstat(handle, &sbuf) == -1) if(::fstat(handle, &sbuf) == -1)
@ -155,7 +156,7 @@ inline size_t query_file_size(file_handle_type handle, std::error_code& error)
error = detail::last_error(); error = detail::last_error();
return 0; return 0;
} }
return sbuf.st_size; return static_cast<size_t>(sbuf.st_size);
#endif #endif
} }
@ -172,7 +173,7 @@ struct mmap_context
inline mmap_context memory_map(const file_handle_type file_handle, const int64_t offset, inline mmap_context memory_map(const file_handle_type file_handle, const int64_t offset,
const int64_t length, const access_mode mode, std::error_code& error) const int64_t length, const access_mode mode, std::error_code& error)
{ {
const int64_t aligned_offset = make_offset_page_aligned(offset); const int64_t aligned_offset = static_cast<int64_t>(make_offset_page_aligned(static_cast<size_t>(offset)));
const int64_t length_to_map = offset - aligned_offset + length; const int64_t length_to_map = offset - aligned_offset + length;
#ifdef _WIN32 #ifdef _WIN32
const int64_t max_file_size = offset + length; const int64_t max_file_size = offset + length;
@ -193,7 +194,7 @@ inline mmap_context memory_map(const file_handle_type file_handle, const int64_t
mode == access_mode::read ? FILE_MAP_READ : FILE_MAP_WRITE, mode == access_mode::read ? FILE_MAP_READ : FILE_MAP_WRITE,
win::int64_high(aligned_offset), win::int64_high(aligned_offset),
win::int64_low(aligned_offset), win::int64_low(aligned_offset),
length_to_map)); static_cast<size_t>(length_to_map)));
if(mapping_start == nullptr) if(mapping_start == nullptr)
{ {
// Close file handle if mapping it failed. // Close file handle if mapping it failed.
@ -204,8 +205,8 @@ inline mmap_context memory_map(const file_handle_type file_handle, const int64_t
#else // POSIX #else // POSIX
char* mapping_start = static_cast<char*>(::mmap( char* mapping_start = static_cast<char*>(::mmap(
0, // Don't give hint as to where to map. 0, // Don't give hint as to where to map.
length_to_map, static_cast<size_t>(length_to_map),
mode == access_mode::read ? PROT_READ : PROT_WRITE, mode == access_mode::read ? PROT_READ : PROT_READ | PROT_WRITE,
MAP_SHARED, MAP_SHARED,
file_handle, file_handle,
aligned_offset)); aligned_offset));
@ -345,8 +346,8 @@ void basic_mmap<AccessMode, ByteT>::map(const handle_type handle,
return; return;
} }
const auto ctx = detail::memory_map(handle, offset, const auto ctx = detail::memory_map(handle, static_cast<int64_t>(offset),
length == map_entire_file ? (file_size - offset) : length, static_cast<int64_t>(length == map_entire_file ? (file_size - offset) : length),
AccessMode, error); AccessMode, error);
if(!error) if(!error)
{ {
@ -359,8 +360,8 @@ void basic_mmap<AccessMode, ByteT>::map(const handle_type handle,
file_handle_ = handle; file_handle_ = handle;
is_handle_internal_ = false; is_handle_internal_ = false;
data_ = reinterpret_cast<pointer>(ctx.data); data_ = reinterpret_cast<pointer>(ctx.data);
length_ = ctx.length; length_ = static_cast<size_t>(ctx.length);
mapped_length_ = ctx.mapped_length; mapped_length_ = static_cast<size_t>(ctx.mapped_length);
#ifdef _WIN32 #ifdef _WIN32
file_mapping_handle_ = ctx.file_mapping_handle; file_mapping_handle_ = ctx.file_mapping_handle;
#endif #endif

View File

@ -21,6 +21,7 @@
#ifndef MIO_PAGE_HEADER #ifndef MIO_PAGE_HEADER
#define MIO_PAGE_HEADER #define MIO_PAGE_HEADER
#include <cstddef>
#ifdef _WIN32 #ifdef _WIN32
# include <windows.h> # include <windows.h>
#else #else
@ -48,7 +49,7 @@ enum class access_mode
*/ */
inline size_t page_size() inline size_t page_size()
{ {
static const size_t page_size = [] static const size_t page_size = static_cast<size_t>([]
{ {
#ifdef _WIN32 #ifdef _WIN32
SYSTEM_INFO SystemInfo; SYSTEM_INFO SystemInfo;
@ -57,7 +58,7 @@ inline size_t page_size()
#else #else
return sysconf(_SC_PAGE_SIZE); return sysconf(_SC_PAGE_SIZE);
#endif #endif
}(); }());
return page_size; return page_size;
} }