Adjust the parameter error of the existing api implementation.

This commit is contained in:
mutouyun 2023-09-09 12:42:14 +08:00
parent d0af950071
commit a56a0cd643
6 changed files with 31 additions and 32 deletions

View File

@ -38,11 +38,11 @@ result<std::int64_t> conf(info r) noexcept {
} }
default: default:
log.error("invalid info = ", underlyof(r)); log.error("invalid info = ", underlyof(r));
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
auto err = sys::error(); auto err = sys::error();
log.error("info = ", underlyof(r), ", error = ", err); log.error("info = ", underlyof(r), ", error = ", err);
return {false, err}; return err;
} }
} // namespace sys } // namespace sys

View File

@ -19,7 +19,6 @@
LIBIMP_NAMESPACE_BEG_ LIBIMP_NAMESPACE_BEG_
namespace sys { namespace sys {
namespace {
/** /**
* \brief Gets a text description of the system error * \brief Gets a text description of the system error
@ -56,8 +55,6 @@ std::string error_string(DWORD code) noexcept {
return {}; return {};
} }
} // namespace
/** /**
* \brief Get the system error number. * \brief Get the system error number.
* \see https://en.cppreference.com/w/cpp/error/system_category * \see https://en.cppreference.com/w/cpp/error/system_category
@ -82,7 +79,7 @@ result<std::int64_t> conf(info r) noexcept {
} }
default: default:
log.error("invalid info = ", underlyof(r)); log.error("invalid info = ", underlyof(r));
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
} }

View File

@ -51,7 +51,7 @@ result<int> shm_open_fd(std::string const &name, mode::type type) noexcept {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (name.empty()) { if (name.empty()) {
log.error("name is empty."); log.error("name is empty.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
/// \brief Open the object for read-write access. /// \brief Open the object for read-write access.
@ -70,7 +70,7 @@ result<int> shm_open_fd(std::string const &name, mode::type type) noexcept {
break; break;
default: default:
log.error("mode type is invalid. type = ", type); log.error("mode type is invalid. type = ", type);
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
/// \brief Create/Open POSIX shared memory bject /// \brief Create/Open POSIX shared memory bject
@ -153,7 +153,9 @@ result<shm_t> shm_open(std::string name, std::size_t size, mode::type type) noex
result<void> shm_close(shm_t h) noexcept { result<void> shm_close(shm_t h) noexcept {
LIBIMP_LOG_(); LIBIMP_LOG_();
auto shm = valid(h); auto shm = valid(h);
if (shm == nullptr) return {}; if (shm == nullptr) {
return std::make_error_code(std::errc::invalid_argument);
}
if (::munmap(shm->memp, shm->f_sz) == posix::failed) { if (::munmap(shm->memp, shm->f_sz) == posix::failed) {
auto err = sys::error(); auto err = sys::error();
log.error("failed: munmap(", shm->memp, ", ", shm->f_sz, "). error = ", err); log.error("failed: munmap(", shm->memp, ", ", shm->f_sz, "). error = ", err);

View File

@ -49,7 +49,7 @@ result<evt_t> evt_open(std::string name) noexcept {
if (h == NULL) { if (h == NULL) {
auto err = sys::error(); auto err = sys::error();
log.error("failed: CreateEvent(FALSE, FALSE, ", name, "). error = ", err); log.error("failed: CreateEvent(FALSE, FALSE, ", name, "). error = ", err);
return {nullptr, err}; return err;
} }
return new evt_handle{std::move(name), h}; return new evt_handle{std::move(name), h};
} }
@ -99,7 +99,7 @@ result<bool> evt_wait(evt_t evt, std::int64_t ms) noexcept {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (!is_valid(evt)) { if (!is_valid(evt)) {
log.error("handle is null."); log.error("handle is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
DWORD dwMilliseconds = (ms < 0) ? INFINITE : static_cast<DWORD>(ms); DWORD dwMilliseconds = (ms < 0) ? INFINITE : static_cast<DWORD>(ms);
auto r = ::WaitForSingleObject(evt->h_event, dwMilliseconds); auto r = ::WaitForSingleObject(evt->h_event, dwMilliseconds);
@ -115,7 +115,7 @@ result<bool> evt_wait(evt_t evt, std::int64_t ms) noexcept {
} }
auto err = sys::error(); auto err = sys::error();
log.error("failed: WaitForSingleObject(", evt->h_event, ", ", dwMilliseconds, "). error = ", err); log.error("failed: WaitForSingleObject(", evt->h_event, ", ", dwMilliseconds, "). error = ", err);
return {false, err}; return err;
} }
/** /**
@ -126,14 +126,14 @@ result<bool> evt_wait(::LIBIMP::span<evt_t const> evts, std::int64_t ms) noexcep
LIBIMP_LOG_(); LIBIMP_LOG_();
if (evts.empty()) { if (evts.empty()) {
log.error("evts handle is empty."); log.error("evts handle is empty.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
// Conversion of the event handle array to the windows handle array. // Conversion of the event handle array to the windows handle array.
std::vector<HANDLE> handles(evts.size()); std::vector<HANDLE> handles(evts.size());
for (std::size_t i = 0; i < evts.size(); ++i) { for (std::size_t i = 0; i < evts.size(); ++i) {
if (!is_valid(evts[i])) { if (!is_valid(evts[i])) {
log.error("handle is null."); log.error("handle is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
handles[i] = evts[i]->h_event; handles[i] = evts[i]->h_event;
} }
@ -152,7 +152,7 @@ result<bool> evt_wait(::LIBIMP::span<evt_t const> evts, std::int64_t ms) noexcep
} }
auto err = sys::error(); auto err = sys::error();
log.error("failed: WaitForMultipleObjects(", handles.size(), ", ", dwMilliseconds, "). error = ", err); log.error("failed: WaitForMultipleObjects(", handles.size(), ", ", dwMilliseconds, "). error = ", err);
return {false, err}; return err;
} }
LIBIPC_NAMESPACE_END_ LIBIPC_NAMESPACE_END_

View File

@ -37,7 +37,7 @@ result<void> mmap_close(HANDLE h) {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (h == NULL) { if (h == NULL) {
log.error("handle is null."); log.error("handle is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
if (!::CloseHandle(h)) { if (!::CloseHandle(h)) {
auto err = sys::error(); auto err = sys::error();
@ -64,12 +64,12 @@ result<HANDLE> mmap_open(std::string const &file, std::size_t size, mode::type t
LIBIMP_LOG_(); LIBIMP_LOG_();
if (file.empty()) { if (file.empty()) {
log.error("file name is empty."); log.error("file name is empty.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
auto t_name = detail::to_tstring(file); auto t_name = detail::to_tstring(file);
if (t_name.empty()) { if (t_name.empty()) {
log.error("file name is empty. (TCHAR conversion failed)"); log.error("file name is empty. (TCHAR conversion failed)");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
/// \brief Opens a named file mapping object. /// \brief Opens a named file mapping object.
@ -78,7 +78,7 @@ result<HANDLE> mmap_open(std::string const &file, std::size_t size, mode::type t
if (h == NULL) { if (h == NULL) {
auto err = sys::error(); auto err = sys::error();
log.error("failed: OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, ", file, "). error = ", err); log.error("failed: OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, ", file, "). error = ", err);
return {nullptr, err}; return err;
} }
return h; return h;
}; };
@ -91,7 +91,7 @@ result<HANDLE> mmap_open(std::string const &file, std::size_t size, mode::type t
if (h == NULL) { if (h == NULL) {
auto err = sys::error(); auto err = sys::error();
log.error("failed: CreateFileMapping(PAGE_READWRITE | SEC_COMMIT, ", size, ", ", file, "). error = ", err); log.error("failed: CreateFileMapping(PAGE_READWRITE | SEC_COMMIT, ", size, ", ", file, "). error = ", err);
return {nullptr, err}; return err;
} }
return h; return h;
}; };
@ -105,7 +105,7 @@ result<HANDLE> mmap_open(std::string const &file, std::size_t size, mode::type t
return try_open(); return try_open();
} else if (!(type & mode::create)) { } else if (!(type & mode::create)) {
log.error("mode type is invalid. type = ", type); log.error("mode type is invalid. type = ", type);
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
auto h = try_create(); auto h = try_create();
if (!h) return h; if (!h) return h;
@ -114,7 +114,7 @@ result<HANDLE> mmap_open(std::string const &file, std::size_t size, mode::type t
if ((type == mode::create) && (::GetLastError() == ERROR_ALREADY_EXISTS)) { if ((type == mode::create) && (::GetLastError() == ERROR_ALREADY_EXISTS)) {
log.info("the file being created already exists. file = ", file, ", type = ", type); log.info("the file being created already exists. file = ", file, ", type = ", type);
mmap_close(*h); mmap_close(*h);
return {}; return sys::error();
} }
return h; return h;
} }
@ -127,13 +127,13 @@ result<LPVOID> mmap_memof(HANDLE h) {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (h == NULL) { if (h == NULL) {
log.error("handle is null."); log.error("handle is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
LPVOID mem = ::MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, 0); LPVOID mem = ::MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (mem == NULL) { if (mem == NULL) {
auto err = sys::error(); auto err = sys::error();
log.error("failed: MapViewOfFile(", h, ", FILE_MAP_ALL_ACCESS). error = ", err); log.error("failed: MapViewOfFile(", h, ", FILE_MAP_ALL_ACCESS). error = ", err);
return {nullptr, err}; return err;
} }
return mem; return mem;
} }
@ -146,13 +146,13 @@ result<SIZE_T> mmap_sizeof(LPCVOID mem) {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (mem == NULL) { if (mem == NULL) {
log.error("memory pointer is null."); log.error("memory pointer is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
MEMORY_BASIC_INFORMATION mem_info {}; MEMORY_BASIC_INFORMATION mem_info {};
if (::VirtualQuery(mem, &mem_info, sizeof(mem_info)) == 0) { if (::VirtualQuery(mem, &mem_info, sizeof(mem_info)) == 0) {
auto err = sys::error(); auto err = sys::error();
log.error("failed: VirtualQuery(", mem, "). error = ", err); log.error("failed: VirtualQuery(", mem, "). error = ", err);
return {false, err}; return err;
} }
return mem_info.RegionSize; return mem_info.RegionSize;
} }
@ -165,11 +165,11 @@ result<void> mmap_release(HANDLE h, LPCVOID mem) {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (h == NULL) { if (h == NULL) {
log.error("handle is null."); log.error("handle is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
if (mem == NULL) { if (mem == NULL) {
log.error("memory pointer is null."); log.error("memory pointer is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
if (!::UnmapViewOfFile(mem)) { if (!::UnmapViewOfFile(mem)) {
log.warning("failed: UnmapViewOfFile. error = ", sys::error()); log.warning("failed: UnmapViewOfFile. error = ", sys::error());

View File

@ -22,19 +22,19 @@ result<shm_t> shm_open(std::string name, std::size_t size, mode::type type) noex
auto h = mmap_open(name, size, type); auto h = mmap_open(name, size, type);
if (*h == NULL) { if (*h == NULL) {
log.error("failed: mmap_open(name = ", name, ", size = ", size, ", type = ", type, ")."); log.error("failed: mmap_open(name = ", name, ", size = ", size, ", type = ", type, ").");
return {nullptr, h.error()}; return h.error();
} }
auto mem = mmap_memof(*h); auto mem = mmap_memof(*h);
if (*mem == NULL) { if (*mem == NULL) {
log.error("failed: mmap_memof(", *h, ")."); log.error("failed: mmap_memof(", *h, ").");
mmap_close(*h); mmap_close(*h);
return {nullptr, mem.error()}; return mem.error();
} }
auto sz = mmap_sizeof(*mem); auto sz = mmap_sizeof(*mem);
if (!sz) { if (!sz) {
log.error("failed: mmap_sizeof(", *mem, ")."); log.error("failed: mmap_sizeof(", *mem, ").");
mmap_close(*h); mmap_close(*h);
return {nullptr, sz.error()}; return sz.error();
} }
return new shm_handle{std::move(name), *sz, *mem, *h}; return new shm_handle{std::move(name), *sz, *mem, *h};
} }
@ -43,7 +43,7 @@ result<void> shm_close(shm_t h) noexcept {
LIBIMP_LOG_(); LIBIMP_LOG_();
if (h == nullptr) { if (h == nullptr) {
log.error("shm handle is null."); log.error("shm handle is null.");
return {}; return std::make_error_code(std::errc::invalid_argument);
} }
auto shm = static_cast<shm_handle *>(h); auto shm = static_cast<shm_handle *>(h);
auto ret = mmap_release(shm->h_fmap, shm->memp); auto ret = mmap_release(shm->h_fmap, shm->memp);