Add some exceptions 24/72124/8
authorOskar Świtalski <o.switalski@samsung.com>
Mon, 30 May 2016 17:08:40 +0000 (19:08 +0200)
committerOskar Świtalski <o.switalski@samsung.com>
Fri, 10 Jun 2016 10:25:13 +0000 (12:25 +0200)
Change-Id: I349de0dc50dc289854d5ac039b6e638521a7485b

src/common/exception/CynaraException.h [new file with mode: 0644]
src/common/exception/ErrnoException.h [new file with mode: 0644]
src/common/exception/Exception.h [new file with mode: 0644]

diff --git a/src/common/exception/CynaraException.h b/src/common/exception/CynaraException.h
new file mode 100644 (file)
index 0000000..af7993a
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ *  Copyright (c) 2016 Samsung Electronics Co.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+/**
+ * @file        src/common/CynaraException.h
+ * @author      Oskar Świtalski <o.switalski@samsung.com>
+ * @brief       Declaration of CynaraException
+ */
+
+#pragma once
+
+#include <exception>
+#include <string>
+
+#include <cynara-error.h>
+
+#include "Exception.h"
+
+namespace AskUser {
+
+class CynaraException : public Exception
+{
+public:
+    CynaraException(const std::string &msg, int err) {
+        static const char *time2Die = "cynara_strerror error ;)";
+        static char strerror[BUFSIZ];
+
+        std::string error = cynara_strerror(err, strerror, sizeof(strerror)) == CYNARA_API_SUCCESS ?
+                                                                                strerror : time2Die;
+
+        m_msg = msg + ": " + error;
+    }
+};
+
+} /* namespace AskUser */
diff --git a/src/common/exception/ErrnoException.h b/src/common/exception/ErrnoException.h
new file mode 100644 (file)
index 0000000..b31d3e7
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *  Copyright (c) 2016 Samsung Electronics Co.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+/**
+ * @file        src/common/ErrnoException.h
+ * @author      Oskar Świtalski <o.switalski@samsung.com>
+ * @brief       Declaration of ErrnoException
+ */
+
+#pragma once
+
+#include <cerrno>
+#include <cstring>
+#include <exception>
+#include <string>
+
+#include "Exception.h"
+
+namespace AskUser {
+
+class ErrnoException : public Exception
+{
+public:
+    ErrnoException(const std::string &msg, int err = errno) {
+        constexpr int bufsize = 1024;
+        char buf[bufsize];
+        char *err_str = strerror_r(err, buf, bufsize);
+        m_msg = msg + ": " + err_str;
+    }
+};
+
+} /* namespace AskUser */
diff --git a/src/common/exception/Exception.h b/src/common/exception/Exception.h
new file mode 100644 (file)
index 0000000..d9404a1
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ *  Copyright (c) 2016 Samsung Electronics Co.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+/**
+ * @file        src/common/Exception.h
+ * @author      Oskar Świtalski <o.switalski@samsung.com>
+ * @brief       Declaration of Exception
+ */
+
+#pragma once
+
+#include <exception>
+#include <string>
+
+namespace AskUser {
+
+class Exception : public std::exception
+{
+public:
+    Exception(const std::string &msg) {
+        m_msg = msg;
+    }
+
+    virtual ~Exception() {};
+
+    virtual const char* what() const noexcept {
+        return m_msg.c_str();
+    }
+
+protected:
+    Exception() = default;
+
+    std::string m_msg;
+};
+
+} /* namespace AskUser */