aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-02-07 17:46:38 -0500
committerJack Lloyd <[email protected]>2018-02-07 17:46:38 -0500
commit3d868667ab5a29c31acde34c22b5b4176619260e (patch)
treee601c3edfe0f1e79f3ed4c3a6898f8130d576ec2
parentdc5b0ab629942d6675f70b5450f7fd12c05320ed (diff)
Make FFI errors an enum, and add a function to translate to strings
-rw-r--r--src/lib/ffi/ffi.cpp45
-rw-r--r--src/lib/ffi/ffi.h80
2 files changed, 71 insertions, 54 deletions
diff --git a/src/lib/ffi/ffi.cpp b/src/lib/ffi/ffi.cpp
index 39749c4d4..ecc8d2899 100644
--- a/src/lib/ffi/ffi.cpp
+++ b/src/lib/ffi/ffi.cpp
@@ -26,6 +26,50 @@ extern "C" {
using namespace Botan_FFI;
+const char* botan_error_description(int err)
+ {
+ switch(err)
+ {
+ case BOTAN_FFI_SUCCESS:
+ return "OK";
+
+ case BOTAN_FFI_INVALID_VERIFIER:
+ return "Invalid verifier";
+
+ case BOTAN_FFI_ERROR_INVALID_INPUT:
+ return "Invalid input";
+
+ case BOTAN_FFI_ERROR_BAD_MAC:
+ return "Invalid authentication code";
+
+ case BOTAN_FFI_ERROR_INSUFFICIENT_BUFFER_SPACE:
+ return "Insufficient buffer space";
+
+ case BOTAN_FFI_ERROR_EXCEPTION_THROWN:
+ return "Exception thrown";
+
+ case BOTAN_FFI_ERROR_BAD_FLAG:
+ return "Bad flag";
+
+ case BOTAN_FFI_ERROR_NULL_POINTER:
+ return "Null pointer argument";
+
+ case BOTAN_FFI_ERROR_BAD_PARAMETER:
+ return "Bad parameter";
+
+ case BOTAN_FFI_ERROR_NOT_IMPLEMENTED:
+ return "Not implemented";
+
+ case BOTAN_FFI_ERROR_INVALID_OBJECT:
+ return "Invalid object handle";
+
+ case BOTAN_FFI_ERROR_UNKNOWN_ERROR:
+ return "Unknown error";
+ }
+
+ return "Unknown error";
+ }
+
/*
* Versioning
*/
@@ -120,4 +164,3 @@ int botan_base64_decode(const char* base64_str, size_t in_len,
}
}
-
diff --git a/src/lib/ffi/ffi.h b/src/lib/ffi/ffi.h
index 20611fde9..323bf54de 100644
--- a/src/lib/ffi/ffi.h
+++ b/src/lib/ffi/ffi.h
@@ -62,6 +62,33 @@ how to provide the cleanest API for such users would be most welcome.
#include <stddef.h>
/**
+* Error codes
+*/
+enum BOTAN_FFI_ERROR {
+ BOTAN_FFI_SUCCESS = 0,
+ BOTAN_FFI_INVALID_VERIFIER = 1,
+
+ BOTAN_FFI_ERROR_INVALID_INPUT = -1,
+ BOTAN_FFI_ERROR_BAD_MAC = -2,
+
+ BOTAN_FFI_ERROR_INSUFFICIENT_BUFFER_SPACE = -10,
+ BOTAN_FFI_ERROR_EXCEPTION_THROWN = -20,
+ BOTAN_FFI_ERROR_BAD_FLAG = -30,
+ BOTAN_FFI_ERROR_NULL_POINTER = -31,
+ BOTAN_FFI_ERROR_BAD_PARAMETER = -32,
+ BOTAN_FFI_ERROR_NOT_IMPLEMENTED = -40,
+ BOTAN_FFI_ERROR_INVALID_OBJECT = -50,
+
+ BOTAN_FFI_ERROR_UNKNOWN_ERROR = -100,
+};
+
+/**
+* Convert an error code into a string. Returns "Unknown error"
+* if the error code is not a known one.
+*/
+const char* botan_error_description(int err);
+
+/**
* Return the version of the currently supported FFI API. This is
* expressed in the form YYYYMMDD of the release date of this version
* of the API.
@@ -100,59 +127,6 @@ BOTAN_PUBLIC_API(2,0) uint32_t botan_version_patch();
*/
BOTAN_PUBLIC_API(2,0) uint32_t botan_version_datestamp();
-/*
-* Error handling
-*
-* Some way of exporting these values to other languages would be useful
-
-
- THIS FUNCTION ASSUMES BOTH ARGUMENTS ARE LITERAL STRINGS
- so it retains only the pointers and does not make a copy.
-
-int botan_make_error(const char* msg, const char* func, int line);
-* This value is returned to callers ^^
-
- normally called like
- return botan_make_error(BOTAN_ERROR_STRING_NOT_IMPLEMENTED, BOTAN_FUNCTION, __LINE__);
-
-// This would seem to require both saving the message permanently
-catch(std::exception& e) {
-return botan_make_error_from_transient_string(e.what(), BOTAN_FUNCTION, __LINE__);
-}
-
-#define botan_make_error_inf(s) return botan_make_error(s, BOTAN_FUNCTION, __LINE__);
-
-Easier to return a const char* from each function directly? However,
-
-catch(std::exception& e) { return e.what(); }
-
-doesn't exactly work well either!
-
-*
-* Later call:
-* const char* botan_get_error_str(int);
-* To recover the msg, func, and line
-
-*/
-#define BOTAN_FFI_SUCCESS (0)
-
-#define BOTAN_FFI_INVALID_VERIFIER (1)
-
-#define BOTAN_FFI_ERROR_INVALID_INPUT (-1)
-#define BOTAN_FFI_ERROR_BAD_MAC (-2)
-
-#define BOTAN_FFI_ERROR_INSUFFICIENT_BUFFER_SPACE (-10)
-#define BOTAN_FFI_ERROR_EXCEPTION_THROWN (-20)
-#define BOTAN_FFI_ERROR_BAD_FLAG (-30)
-#define BOTAN_FFI_ERROR_NULL_POINTER (-31)
-#define BOTAN_FFI_ERROR_BAD_PARAMETER (-32)
-#define BOTAN_FFI_ERROR_NOT_IMPLEMENTED (-40)
-#define BOTAN_FFI_ERROR_INVALID_OBJECT (-50)
-
-#define BOTAN_FFI_ERROR_UNKNOWN_ERROR (-100)
-
-//const char* botan_error_description(int err);
-
/**
* Returns 0 if x[0..len] == y[0..len], or otherwise -1
*/