summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorClaudius Holeksa <mail@keldu.de>2023-05-14 12:46:49 +0200
committerClaudius Holeksa <mail@keldu.de>2023-05-14 12:46:49 +0200
commit14cb83d0d70aa33135090aed2d6b750f69e189f3 (patch)
treeb12532e39a623ae7ed64e5985ad9c8a379d2da26 /src
parent61e51d8d71c5dbf4a92798fca7c1c325935b87be (diff)
c++: Fixing error handling in old source
Diffstat (limited to 'src')
-rw-r--r--src/io/io.h5
-rw-r--r--src/io/io_unix.cpp23
2 files changed, 16 insertions, 12 deletions
diff --git a/src/io/io.h b/src/io/io.h
index bcc59fd..b2792dd 100644
--- a/src/io/io.h
+++ b/src/io/io.h
@@ -16,6 +16,11 @@ struct disconnected {
static constexpr std::string_view description = "Disconnected";
static constexpr bool is_critical = true;
};
+
+struct resource_busy {
+ static constexpr std::string_view description = "Resource busy";
+ static constexpr bool is_critical = false;
+};
}
/*
* Input stream
diff --git a/src/io/io_unix.cpp b/src/io/io_unix.cpp
index b5f17e5..e59fa66 100644
--- a/src/io/io_unix.cpp
+++ b/src/io/io_unix.cpp
@@ -496,10 +496,10 @@ error_or<size_t> unix_io_stream::read(void *buffer, size_t length) {
if (read_bytes > 0) {
return static_cast<size_t>(read_bytes);
} else if (read_bytes == 0) {
- return critical_error("Disconnected", error::code::Disconnected);
+ return make_error<err::disconnected>();
}
- return recoverable_error("Currently busy");
+ return make_error<err::resource_busy>();
}
conveyor<void> unix_io_stream::read_ready() {
@@ -523,10 +523,10 @@ error_or<size_t> unix_io_stream::write(const void *buffer, size_t length) {
int error = errno;
if (error == EAGAIN || error == EWOULDBLOCK) {
- return recoverable_error("Currently busy");
+ return make_error<err::resource_busy>();
}
- return critical_error("Disconnected", error::code::Disconnected);
+ return make_error<err::disconnected>();
}
conveyor<void> unix_io_stream::write_ready() {
@@ -609,7 +609,7 @@ error_or<size_t> unix_datagram::read(void *buffer, size_t length) {
if (read_bytes > 0) {
return static_cast<size_t>(read_bytes);
}
- return recoverable_error("Currently busy");
+ return make_error<err::resource_busy>();
}
conveyor<void> unix_datagram::read_ready() {
@@ -628,7 +628,7 @@ error_or<size_t> unix_datagram::write(const void *buffer, size_t length,
if (write_bytes > 0) {
return static_cast<size_t>(write_bytes);
}
- return recoverable_error("Currently busy");
+ return make_error<err::resource_busy>();
}
conveyor<void> unix_datagram::write_ready() {
@@ -742,12 +742,12 @@ conveyor<own<io_stream>> unix_network::connect(network_address &addr) {
assert(address.unix_address_size() > 0);
if (address.unix_address_size() == 0) {
- return conveyor<own<io_stream>>{critical_error("No address found")};
+ return conveyor<own<io_stream>>{make_error<err::critical>()};
}
int fd = address.unix_address(0).socket(SOCK_STREAM);
if (fd < 0) {
- return conveyor<own<io_stream>>{critical_error("Couldn't open socket")};
+ return conveyor<own<io_stream>>{make_error<err::disconnected>()};
}
own<unix_io_stream> io_str =
@@ -780,8 +780,7 @@ conveyor<own<io_stream>> unix_network::connect(network_address &addr) {
break;
} else if (error != EINTR) {
/// @todo Push error message from
- return conveyor<own<io_stream>>{
- critical_error("Couldn't connect")};
+ return conveyor<own<io_stream>>{make_error<err::disconnected>()};
}
} else {
success = true;
@@ -790,7 +789,7 @@ conveyor<own<io_stream>> unix_network::connect(network_address &addr) {
}
if (!success) {
- return critical_error("Couldn't connect");
+ return conveyor<own<io_stream>>{make_error<err::disconnected>()};
}
return conveyor<own<io_stream>>{std::move(io_str)};
@@ -888,7 +887,7 @@ error_or<async_io_context> setup_async_io() {
return {{std::move(io_provider), loop_ref, prt_ref}};
} catch (std::bad_alloc &) {
- return critical_error("Out of memory");
+ return make_error<err::out_of_memory>();
}
}
} // namespace saw