]> git.localhorst.tv Git - blank.git/commitdiff
move common exceptions to app/error
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 21 Nov 2016 09:22:49 +0000 (10:22 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 21 Nov 2016 09:26:26 +0000 (10:26 +0100)
15 files changed:
src/app/error.cpp [new file with mode: 0644]
src/app/error.hpp [new file with mode: 0644]
src/app/init.cpp
src/app/init.hpp
src/app/proc.cpp
src/client/net.cpp
src/graphics/render.cpp
src/graphics/shader.cpp
src/graphics/viewport.cpp
src/io/WorldSave.cpp
src/io/filesystem.cpp
src/net/net.cpp
src/net/tcp.cpp
src/server/net.cpp
src/ui/ui.cpp

diff --git a/src/app/error.cpp b/src/app/error.cpp
new file mode 100644 (file)
index 0000000..3b29a34
--- /dev/null
@@ -0,0 +1,159 @@
+#include "error.hpp"
+
+#include <alut.h>
+#include <cerrno>
+#include <cstring>
+#include <SDL.h>
+#include <SDL_net.h>
+#include <SDL_ttf.h>
+#include <GL/glew.h>
+
+using namespace std;
+
+
+namespace {
+
+string alut_error_append(ALenum num, string msg) {
+       const char *error = alutGetErrorString(num);
+       if (error && *error != '\0') {
+               msg += ": ";
+               msg += error;
+       }
+       return msg;
+}
+
+string gl_error_append(string msg) {
+       const GLubyte *error = gluErrorString(glGetError());
+       if (error && *error != '\0') {
+               const GLubyte *errEnd = error;
+               while (*errEnd != '\0') {
+                       ++errEnd;
+               }
+               msg += ": ";
+               msg.append(error, errEnd);
+       }
+       return msg;
+}
+
+string gl_error_get() {
+       string msg;
+       const GLubyte *error = gluErrorString(glGetError());
+       if (error && *error != '\0') {
+               const GLubyte *errEnd = error;
+               while (*errEnd != '\0') {
+                       ++errEnd;
+               }
+               msg.assign(error, errEnd);
+       }
+       return msg;
+}
+
+string net_error_append(string msg) {
+       const char *error = SDLNet_GetError();
+       if (*error != '\0') {
+               msg += ": ";
+               msg += error;
+       }
+       return msg;
+}
+
+string sdl_error_append(string msg) {
+       const char *error = SDL_GetError();
+       if (error && *error != '\0') {
+               msg += ": ";
+               msg += error;
+               SDL_ClearError();
+       }
+       return msg;
+}
+
+string ttf_error_append(string msg) {
+       const char *error = TTF_GetError();
+       if (error && *error != '\0') {
+               msg += ": ";
+               msg += error;
+       }
+       return msg;
+}
+
+}
+
+
+namespace blank {
+
+AlutError::AlutError(ALenum num)
+: runtime_error(alutGetErrorString(num)) {
+
+}
+
+AlutError::AlutError(ALenum num, const string &msg)
+: runtime_error(alut_error_append(num, msg)) {
+
+}
+
+
+GLError::GLError()
+: runtime_error(gl_error_get()) {
+
+}
+
+GLError::GLError(const string &msg)
+: runtime_error(gl_error_append(msg)) {
+
+}
+
+
+NetError::NetError()
+: runtime_error(SDLNet_GetError()) {
+
+}
+
+NetError::NetError(const string &msg)
+: runtime_error(net_error_append(msg)) {
+
+}
+
+
+SDLError::SDLError()
+: runtime_error(SDL_GetError()) {
+
+}
+
+SDLError::SDLError(const string &msg)
+: runtime_error(sdl_error_append(msg)) {
+
+}
+
+
+SysError::SysError()
+: SysError(errno) {
+
+}
+
+SysError::SysError(const string &msg)
+: SysError(errno, msg) {
+
+}
+
+SysError::SysError(int err_num)
+: runtime_error(strerror(err_num)) {
+
+}
+
+SysError::SysError(int err_num, const string &msg)
+: runtime_error(msg + ": " + strerror(err_num)) {
+
+}
+
+
+TTFError::TTFError()
+: runtime_error(TTF_GetError()) {
+
+}
+
+TTFError::TTFError(const string &msg)
+: runtime_error(ttf_error_append(msg)) {
+
+}
+
+}
diff --git a/src/app/error.hpp b/src/app/error.hpp
new file mode 100644 (file)
index 0000000..0f22f8a
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef BLANK_APP_ERROR_HPP_
+#define BLANK_APP_ERROR_HPP_
+
+#include <al.h>
+#include <stdexcept>
+#include <string>
+
+
+namespace blank {
+
+class AlutError
+: public std::runtime_error {
+
+public:
+       explicit AlutError(ALenum);
+       AlutError(ALenum, const std::string &);
+
+};
+
+
+class GLError
+: public std::runtime_error {
+
+public:
+       GLError();
+       explicit GLError(const std::string &);
+
+};
+
+
+class NetError
+: public std::runtime_error {
+
+public:
+       NetError();
+       explicit NetError(const std::string &);
+
+};
+
+
+class SDLError
+: public std::runtime_error {
+
+public:
+       SDLError();
+       explicit SDLError(const std::string &);
+
+};
+
+
+class SysError
+: public std::runtime_error {
+
+public:
+       SysError();
+       explicit SysError(const std::string &);
+       explicit SysError(int err_num);
+       SysError(int err_num, const std::string &);
+
+};
+
+
+class TTFError
+: public std::runtime_error {
+
+public:
+       TTFError();
+       explicit TTFError(const std::string &);
+
+};
+
+}
+
+#endif
index 78a83e1df190d741c170c2823d7a07f578daa8e6..dfadffe16f0c1591dc76810a47c7dfbeae3c6463 100644 (file)
@@ -6,76 +6,12 @@
 #include <SDL_image.h>
 #include <SDL_net.h>
 #include <SDL_ttf.h>
+#include <string>
 #include <GL/glew.h>
 
 
-namespace {
-
-std::string sdl_error_append(std::string msg) {
-       const char *error = SDL_GetError();
-       if (*error != '\0') {
-               msg += ": ";
-               msg += error;
-               SDL_ClearError();
-       }
-       return msg;
-}
-
-std::string net_error_append(std::string msg) {
-       const char *error = SDLNet_GetError();
-       if (*error != '\0') {
-               msg += ": ";
-               msg += error;
-       }
-       return msg;
-}
-
-std::string alut_error_append(ALenum num, std::string msg) {
-       const char *error = alutGetErrorString(num);
-       if (*error != '\0') {
-               msg += ": ";
-               msg += error;
-       }
-       return msg;
-}
-
-}
-
 namespace blank {
 
-AlutError::AlutError(ALenum num)
-: std::runtime_error(alutGetErrorString(num)) {
-
-}
-
-AlutError::AlutError(ALenum num, const std::string &msg)
-: std::runtime_error(alut_error_append(num, msg)) {
-
-}
-
-
-NetError::NetError()
-: std::runtime_error(SDLNet_GetError()) {
-
-}
-
-NetError::NetError(const std::string &msg)
-: std::runtime_error(net_error_append(msg)) {
-
-}
-
-
-SDLError::SDLError()
-: std::runtime_error(SDL_GetError()) {
-
-}
-
-SDLError::SDLError(const std::string &msg)
-: std::runtime_error(sdl_error_append(msg)) {
-
-}
-
-
 InitSDL::InitSDL() {
        if (SDL_Init(SDL_INIT_EVENTS) != 0) {
                throw SDLError("SDL_Init(SDL_INIT_EVENTS)");
index 9385d44979b815078f609e332cf9617b08607e3c..42a4176af29ba02f03665ac0981f071222748e88 100644 (file)
@@ -1,42 +1,14 @@
 #ifndef BLANK_APP_INIT_HPP_
 #define BLANK_APP_INIT_HPP_
 
+#include "error.hpp"
+
 #include <al.h>
 #include <SDL.h>
-#include <stdexcept>
-#include <string>
 
 
 namespace blank {
 
-class AlutError
-: public std::runtime_error {
-
-public:
-       explicit AlutError(ALenum);
-       AlutError(ALenum, const std::string &);
-
-};
-
-class SDLError
-: public std::runtime_error {
-
-public:
-       SDLError();
-       explicit SDLError(const std::string &);
-
-};
-
-class NetError
-: public std::runtime_error {
-
-public:
-       NetError();
-       explicit NetError(const std::string &);
-
-};
-
-
 class InitSDL {
 
 public:
index f30c0cb2dcab508be7ee480fb63955f8fef721ff..c219c723effe3050b3e5c52221ce497a88f15610 100644 (file)
@@ -1,5 +1,7 @@
 #include "Process.hpp"
 
+#include "error.hpp"
+
 #ifdef _WIN32
 #  include <tchar.h>
 #  include <windows.h>
@@ -166,18 +168,18 @@ Process::Impl::Impl(
        argv[args.size()] = nullptr;
 
        if (pipe(fd_in) != 0) {
-               throw runtime_error("failed to open pipe for child process' stdin");
+               throw SysError("failed to open pipe for child process' stdin");
        }
        if (pipe(fd_out) != 0) {
-               throw runtime_error("failed to open pipe for child process' stdout");
+               throw SysError("failed to open pipe for child process' stdout");
        }
        if (pipe(fd_err) != 0) {
-               throw runtime_error("failed to open pipe for child process' stderr");
+               throw SysError("failed to open pipe for child process' stderr");
        }
 
        pid = fork();
        if (pid == -1) {
-               throw runtime_error("fork");
+               throw SysError("fork");
        } else if (pid == 0) {
 
                if (dup2(fd_in[0], STDIN_FILENO) == -1) {
@@ -228,7 +230,7 @@ size_t Process::Impl::WriteIn(const void *buffer, size_t max_len) {
                if (errno == EAGAIN) {
                        return 0;
                } else {
-                       throw runtime_error("failed to write to child process' input stream");
+                       throw SysError("failed to write to child process' input stream");
                }
        }
        return written;
@@ -248,7 +250,7 @@ size_t Process::Impl::ReadOut(void *buffer, size_t max_len) {
                if (errno == EAGAIN) {
                        return 0;
                } else {
-                       throw runtime_error("failed to read from child process' output stream");
+                       throw SysError("failed to read from child process' output stream");
                }
        }
        return ret;
@@ -268,7 +270,7 @@ size_t Process::Impl::ReadErr(void *buffer, size_t max_len) {
                if (errno == EAGAIN) {
                        return 0;
                } else {
-                       throw runtime_error("failed to read from child process' error stream");
+                       throw SysError("failed to read from child process' error stream");
                }
        }
        return ret;
@@ -281,7 +283,7 @@ void Process::Impl::Terminate() {
 #else
        if (kill(pid, SIGTERM) == -1) {
 #endif
-               throw runtime_error("failed to terminate child process");
+               throw SysError("failed to terminate child process");
        }
 }
 
@@ -307,7 +309,7 @@ int Process::Impl::Join() {
                int status;
                int result = waitpid(pid, &status, 0);
                if (result == -1) {
-                       throw runtime_error("error waiting on child process");
+                       throw SysError("error waiting on child process");
                }
                if (result == pid && WIFEXITED(status)) {
                        return WEXITSTATUS(status);
index f1e555336699738a4434470c1bd1955ad8bea4d4..879dfb10ef8908cc30f3b4a07f62d50318e2b2a5 100644 (file)
@@ -3,7 +3,7 @@
 #include "Client.hpp"
 #include "NetworkedInput.hpp"
 
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 #include "../geometry/distance.hpp"
 #include "../io/WorldSave.hpp"
 #include "../net/Packet.hpp"
index d1913ad3e77b18d3a20aa51c4d6af7326982827b..f0ead9ba78073f602d40bac8ffb6da04575ecf05 100644 (file)
@@ -6,7 +6,7 @@
 #include "TextureBase.hpp"
 #include "Viewport.hpp"
 
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 
 #include <algorithm>
 #include <cstring>
@@ -20,7 +20,7 @@ namespace blank {
 Font::Font(const char *src, int size, long index)
 : handle(TTF_OpenFontIndex(src, size, index)) {
        if (!handle) {
-               throw std::runtime_error(TTF_GetError());
+               throw TTFError("TTF_OpenFontIndex");
        }
 }
 
@@ -109,7 +109,7 @@ bool Font::HasGlyph(Uint16 c) const noexcept {
 glm::ivec2 Font::TextSize(const char *text) const {
        glm::ivec2 size;
        if (TTF_SizeUTF8(handle, text, &size.x, &size.y) != 0) {
-               throw std::runtime_error(TTF_GetError());
+               throw TTFError("TTF_SizeUTF8");
        }
        return size;
 }
@@ -123,7 +123,7 @@ Texture Font::Render(const char *text) const {
 void Font::Render(const char *text, Texture &tex) const {
        SDL_Surface *srf = TTF_RenderUTF8_Blended(handle, text, { 0xFF, 0xFF, 0xFF, 0xFF });
        if (!srf) {
-               throw std::runtime_error(TTF_GetError());
+               throw TTFError("TTF_RenderUTF8_Blended");
        }
        tex.Bind();
        tex.Data(*srf, false);
index 85f0184684eb791ba0f24c79a63c661a39378f1f..5a07143f13e21fa8ae28802a6c4a25827451ac4f 100644 (file)
@@ -9,7 +9,7 @@
 #include "ArrayTexture.hpp"
 #include "CubeMap.hpp"
 #include "Texture.hpp"
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 
 #include <algorithm>
 #include <iostream>
 #include <glm/gtc/type_ptr.hpp>
 
 
-namespace {
-
-void gl_error(std::string msg) {
-       const GLubyte *errBegin = gluErrorString(glGetError());
-       if (errBegin && *errBegin != '\0') {
-               const GLubyte *errEnd = errBegin;
-               while (*errEnd != '\0') {
-                       ++errEnd;
-               }
-               msg += ": ";
-               msg.append(errBegin, errEnd);
-       }
-       throw std::runtime_error(msg);
-}
-
-}
-
 namespace blank {
 
 Shader::Shader(GLenum type)
 : handle(glCreateShader(type)) {
        if (handle == 0) {
-               gl_error("glCreateShader");
+               throw GLError("glCreateShader");
        }
 }
 
@@ -95,7 +78,7 @@ void Shader::AttachToProgram(GLuint id) const noexcept {
 Program::Program()
 : handle(glCreateProgram()) {
        if (handle == 0) {
-               gl_error("glCreateProgram");
+               throw GLError("glCreateProgram");
        }
 }
 
index cb446191ab8b0458769c21e0bd21916528af3fe4..a475f3e796f1d4c8d2b2af82987db711d368beb5 100644 (file)
@@ -3,7 +3,7 @@
 #include "SkyBox.hpp"
 #include "Viewport.hpp"
 
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 #include "../geometry/const.hpp"
 
 #include <GL/glew.h>
index ce7c71d35ea55c19d85b85b56b0a3f7d8e83db01..529d0d91a5784da2f1cf2cea55ae62a1fc87b75c 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "filesystem.hpp"
 #include "TokenStreamReader.hpp"
+#include "../app/error.hpp"
 
 #include <cctype>
 #include <cstring>
@@ -196,7 +197,7 @@ void WorldSave::Write(Chunk &chunk) const {
                // check if it's because of a missing path component
                if (errno != ENOENT) {
                        // nope, fatal
-                       throw runtime_error(strerror(errno));
+                       throw SysError();
                }
                string dir_path(path);
                dir_path.erase(dir_path.find_last_of("\\/"));
index 5a4515e78dfab5629e5ce806b0622d9822829cc2..bdea3a553efed4f3b9100da2b90de5b2e6785543 100644 (file)
@@ -1,5 +1,7 @@
 #include "filesystem.hpp"
 
+#include "../app/error.hpp"
+
 #include <cerrno>
 #include <cstdio>
 #include <cstdlib>
@@ -219,7 +221,7 @@ TempDir::TempDir() {
        char tmpl[] = "blank.XXXXXX";
        const char *name = mkdtemp(tmpl);
        if (!name) {
-               throw runtime_error("unable to create temporary directory");
+               throw SysError("unable to create temporary directory");
        }
        path = name;
 #else
index 4f7fc66647a2817eb8f87133f4f937e382096097..1dcb9d0e696cbf479f9c427db0f3f5eb12e161cc 100644 (file)
@@ -4,7 +4,7 @@
 #include "io.hpp"
 #include "Packet.hpp"
 
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 #include "../geometry/const.hpp"
 #include "../model/Model.hpp"
 #include "../world/Entity.hpp"
index 7d8862a6697dbd17ade4d1d5dc51e4aff35346ab..6ecd2cdb80b79e8e75e42efe09f1582d4b4195d5 100644 (file)
@@ -1,6 +1,6 @@
 #include "tcp.hpp"
 
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 
 #include <stdexcept>
 
index f5e974d7e71bcfb9808e08a7d9fc909aa1dbe2d8..b5590ee1b41dfe353d0ba8f12cc9594f572d3d8b 100644 (file)
@@ -2,7 +2,7 @@
 #include "ChunkTransmitter.hpp"
 #include "Server.hpp"
 
-#include "../app/init.hpp"
+#include "../app/error.hpp"
 #include "../geometry/distance.hpp"
 #include "../io/WorldSave.hpp"
 #include "../model/Model.hpp"
index 5ff408be5fddc4f615eb2122230603b6b8cc6516..2fffcbdec19d1a9b8a40639255d31921823c1066 100644 (file)
@@ -10,7 +10,6 @@
 #include "../app/Config.hpp"
 #include "../app/Environment.hpp"
 #include "../app/FrameCounter.hpp"
-#include "../app/init.hpp"
 #include "../audio/Audio.hpp"
 #include "../audio/SoundBank.hpp"
 #include "../geometry/distance.hpp"