mirror of
https://github.com/vimpunk/mio.git
synced 2025-12-06 08:46:51 +08:00
Merge 9d54db9c4477d8e9b2c8bf897e700236666cbe1c into 8b6b7d878c89e81614d05edca7936de41ccdd2da
This commit is contained in:
commit
0cbb19167d
@ -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
|
||||
|
||||
@ -21,11 +21,12 @@
|
||||
#ifndef MIO_BASIC_MMAP_IMPL
|
||||
#define MIO_BASIC_MMAP_IMPL
|
||||
|
||||
#include "mio/mmap.hpp"
|
||||
#include "mio/page.hpp"
|
||||
#include "mio/detail/string_util.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
|
||||
#ifndef _WIN32
|
||||
# include <unistd.h>
|
||||
@ -43,13 +44,13 @@ namespace win {
|
||||
/** Returns the 4 upper bytes of an 8-byte integer. */
|
||||
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. */
|
||||
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)
|
||||
@ -60,7 +61,7 @@ inline std::wstring s_2_ws(const std::string& s)
|
||||
ret.resize(s.size());
|
||||
int wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(),
|
||||
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;
|
||||
}
|
||||
@ -107,7 +108,7 @@ inline std::error_code last_error() noexcept
|
||||
{
|
||||
std::error_code error;
|
||||
#ifdef _WIN32
|
||||
error.assign(GetLastError(), std::system_category());
|
||||
error.assign(static_cast<int>(GetLastError()), std::system_category());
|
||||
#else
|
||||
error.assign(errno, std::system_category());
|
||||
#endif
|
||||
@ -147,7 +148,7 @@ inline size_t query_file_size(file_handle_type handle, std::error_code& error)
|
||||
error = detail::last_error();
|
||||
return 0;
|
||||
}
|
||||
return static_cast<int64_t>(file_size.QuadPart);
|
||||
return static_cast<size_t>(file_size.QuadPart);
|
||||
#else // POSIX
|
||||
struct stat sbuf;
|
||||
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();
|
||||
return 0;
|
||||
}
|
||||
return sbuf.st_size;
|
||||
return static_cast<size_t>(sbuf.st_size);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -172,7 +173,7 @@ struct mmap_context
|
||||
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 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;
|
||||
#ifdef _WIN32
|
||||
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,
|
||||
win::int64_high(aligned_offset),
|
||||
win::int64_low(aligned_offset),
|
||||
length_to_map));
|
||||
static_cast<size_t>(length_to_map)));
|
||||
if(mapping_start == nullptr)
|
||||
{
|
||||
// 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
|
||||
char* mapping_start = static_cast<char*>(::mmap(
|
||||
0, // Don't give hint as to where to map.
|
||||
length_to_map,
|
||||
mode == access_mode::read ? PROT_READ : PROT_WRITE,
|
||||
static_cast<size_t>(length_to_map),
|
||||
mode == access_mode::read ? PROT_READ : PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED,
|
||||
file_handle,
|
||||
aligned_offset));
|
||||
@ -345,8 +346,8 @@ void basic_mmap<AccessMode, ByteT>::map(const handle_type handle,
|
||||
return;
|
||||
}
|
||||
|
||||
const auto ctx = detail::memory_map(handle, offset,
|
||||
length == map_entire_file ? (file_size - offset) : length,
|
||||
const auto ctx = detail::memory_map(handle, static_cast<int64_t>(offset),
|
||||
static_cast<int64_t>(length == map_entire_file ? (file_size - offset) : length),
|
||||
AccessMode, error);
|
||||
if(!error)
|
||||
{
|
||||
@ -359,8 +360,8 @@ void basic_mmap<AccessMode, ByteT>::map(const handle_type handle,
|
||||
file_handle_ = handle;
|
||||
is_handle_internal_ = false;
|
||||
data_ = reinterpret_cast<pointer>(ctx.data);
|
||||
length_ = ctx.length;
|
||||
mapped_length_ = ctx.mapped_length;
|
||||
length_ = static_cast<size_t>(ctx.length);
|
||||
mapped_length_ = static_cast<size_t>(ctx.mapped_length);
|
||||
#ifdef _WIN32
|
||||
file_mapping_handle_ = ctx.file_mapping_handle;
|
||||
#endif
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
#ifndef MIO_PAGE_HEADER
|
||||
#define MIO_PAGE_HEADER
|
||||
|
||||
#include <cstddef>
|
||||
#ifdef _WIN32
|
||||
# include <windows.h>
|
||||
#else
|
||||
@ -48,7 +49,7 @@ enum class access_mode
|
||||
*/
|
||||
inline size_t page_size()
|
||||
{
|
||||
static const size_t page_size = []
|
||||
static const size_t page_size = static_cast<size_t>([]
|
||||
{
|
||||
#ifdef _WIN32
|
||||
SYSTEM_INFO SystemInfo;
|
||||
@ -57,7 +58,7 @@ inline size_t page_size()
|
||||
#else
|
||||
return sysconf(_SC_PAGE_SIZE);
|
||||
#endif
|
||||
}();
|
||||
}());
|
||||
return page_size;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user