> > Introduces an exception hierarchy up to a ReadError class, which is > thrown from read_all(). > > Signed-off-by: Lukáš Hrázký <lhrazky@xxxxxxxxxx> > --- > src/Makefile.am | 2 ++ > src/error.cpp | 29 ++++++++++++++++++++++++++++ > src/error.hpp | 44 > +++++++++++++++++++++++++++++++++++++++++++ > src/spice-streaming-agent.cpp | 2 +- > src/stream-port.cpp | 4 ++-- > 5 files changed, 78 insertions(+), 3 deletions(-) > create mode 100644 src/error.cpp > create mode 100644 src/error.hpp > > diff --git a/src/Makefile.am b/src/Makefile.am > index 604c1e5..18ed22c 100644 > --- a/src/Makefile.am > +++ b/src/Makefile.am > @@ -52,6 +52,8 @@ spice_streaming_agent_SOURCES = \ > spice-streaming-agent.cpp \ > concrete-agent.cpp \ > concrete-agent.hpp \ > + error.cpp \ > + error.hpp \ > mjpeg-fallback.cpp \ > mjpeg-fallback.hpp \ > jpeg.cpp \ > diff --git a/src/error.cpp b/src/error.cpp > new file mode 100644 > index 0000000..1b76ea4 > --- /dev/null > +++ b/src/error.cpp > @@ -0,0 +1,29 @@ > +/* The errors module. > + * > + * \copyright > + * Copyright 2018 Red Hat Inc. All rights reserved. > + */ > + > +#include "error.hpp" > + > +#include <string.h> > +#include <syslog.h> > + > + > +namespace spice { > +namespace streaming_agent { > + > +Error::Error(const std::string &message) : message(message) {} > + > +const char* Error::what() const noexcept > +{ > + return message.c_str(); > +} > + > +IOError::IOError(const std::string &msg, int errno_) : I personally don't like much the errno_, maybe a sys_error? > + Error(msg + ": " + std::to_string(errno_) + " - " + strerror(errno_)) > +{} > + > +ReadError::ReadError(const std::string &msg, int errno_) : IOError(msg, > errno_) {} > + Not strong opinion, maybe format the same way the other constructor? > +}} // namespace spice::streaming_agent > diff --git a/src/error.hpp b/src/error.hpp > new file mode 100644 > index 0000000..de1cb83 > --- /dev/null > +++ b/src/error.hpp > @@ -0,0 +1,44 @@ > +/* The errors module. > + * > + * \copyright > + * Copyright 2018 Red Hat Inc. All rights reserved. > + */ > + > +#ifndef SPICE_STREAMING_AGENT_ERROR_HPP > +#define SPICE_STREAMING_AGENT_ERROR_HPP > + > +#include <exception> > +#include <string> > + > + > +namespace spice { > +namespace streaming_agent { > + > +class Error : public std::exception > +{ > +public: > + Error(const std::string &message); > + const char *what() const noexcept override final; > + > +protected: > + const std::string message; > +}; > + > +class IOError : public Error > +{ > +public: > + IOError(const std::string &msg, int errno_); > + Maybe the error count have a default value, something like: IOError(const std::string &msg, int sys_error = errno); > +protected: > + int errno_; > +}; > + > +class ReadError : public IOError > +{ > +public: > + ReadError(const std::string &msg, int errno_); > +}; > + > +}} // namespace spice::streaming_agent > + > +#endif // SPICE_STREAMING_AGENT_ERROR_HPP > diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp > index 7b166d3..2c0340d 100644 > --- a/src/spice-streaming-agent.cpp > +++ b/src/spice-streaming-agent.cpp > @@ -535,7 +535,7 @@ int main(int argc, char* argv[]) > try { > do_capture(streamport, f_log); > } > - catch (std::runtime_error &err) { > + catch (std::exception &err) { > syslog(LOG_ERR, "%s\n", err.what()); > ret = EXIT_FAILURE; > } > diff --git a/src/stream-port.cpp b/src/stream-port.cpp > index 3699d92..f256698 100644 > --- a/src/stream-port.cpp > +++ b/src/stream-port.cpp > @@ -5,6 +5,7 @@ > */ > > #include "stream-port.hpp" > +#include "error.hpp" > > #include <errno.h> > #include <string.h> > @@ -25,8 +26,7 @@ void read_all(int fd, void *msg, size_t len) > if (errno == EINTR) { > continue; > } > - throw std::runtime_error("Reading message from device failed: " > + > - std::string(strerror(errno))); > + throw ReadError("Reading message from device failed", errno); > } > > len -= n; Beside that, Acked-by: Frediano Ziglio <fziglio@xxxxxxxxxx> Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel