aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/ffi
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2017-01-04 13:08:29 -0500
committerJack Lloyd <[email protected]>2017-01-04 13:08:29 -0500
commitbb935199499b96f4a544bedc3f5367039e947e81 (patch)
treef69760b2b01a3d85f03084a51e6d95c32fe55263 /src/lib/ffi
parentddbacb3b1e874c68bd60f3fd32f6a7fd3bbcade3 (diff)
Add botan_ffi_supports_api function
This lets us upgrade the FFI version over time and still allow applications to reliably detect if the current library binary supports their version. As an example, it would be useful to be able to add features to FFI sometime in 2.x. In that case, we would increase the value of the FFI API version, even though anything calling the old API would still work perfectly. Applications can verify at runtime the API they want to use is supported using this new call.
Diffstat (limited to 'src/lib/ffi')
-rw-r--r--src/lib/ffi/ffi.cpp11
-rw-r--r--src/lib/ffi/ffi.h6
2 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/ffi/ffi.cpp b/src/lib/ffi/ffi.cpp
index 4727c0763..5c4cba4e7 100644
--- a/src/lib/ffi/ffi.cpp
+++ b/src/lib/ffi/ffi.cpp
@@ -208,6 +208,17 @@ uint32_t botan_ffi_api_version()
return BOTAN_HAS_FFI;
}
+int botan_ffi_supports_api(uint32_t api_version)
+ {
+ /*
+ * In the future if multiple versions are supported, this
+ * function would accept any of them.
+ */
+ if(api_version == BOTAN_HAS_FFI)
+ return 0;
+ return -1;
+ }
+
const char* botan_version_string()
{
return Botan::version_cstr();
diff --git a/src/lib/ffi/ffi.h b/src/lib/ffi/ffi.h
index ed1b55a56..3378e0dcd 100644
--- a/src/lib/ffi/ffi.h
+++ b/src/lib/ffi/ffi.h
@@ -66,6 +66,12 @@ how to provide the cleanest API for such users would be most welcome.
*/
BOTAN_DLL uint32_t botan_ffi_api_version();
+/*
+* Return 0 (ok) if the version given is one this library supports.
+* botan_ffi_supports_api(botan_ffi_api_version()) will always return 0.
+*/
+BOTAN_DLL int botan_ffi_supports_api(uint32_t api_version);
+
BOTAN_DLL const char* botan_version_string();
BOTAN_DLL uint32_t botan_version_major();
BOTAN_DLL uint32_t botan_version_minor();