diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:44:33 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:44:33 +0000 |
commit | b196c6498d22e47bb9d0da0153068ec54eac7956 (patch) | |
tree | 1a994a492581e93224a7ee6455f5d4e9d2ec8e59 /mocktracer/src/dynamic_load.cpp | |
parent | Initial commit. (diff) | |
download | opentracing-cpp-b196c6498d22e47bb9d0da0153068ec54eac7956.tar.xz opentracing-cpp-b196c6498d22e47bb9d0da0153068ec54eac7956.zip |
Adding upstream version 1.6.0.upstream/1.6.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mocktracer/src/dynamic_load.cpp')
-rw-r--r-- | mocktracer/src/dynamic_load.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/mocktracer/src/dynamic_load.cpp b/mocktracer/src/dynamic_load.cpp new file mode 100644 index 0000000..0fc7371 --- /dev/null +++ b/mocktracer/src/dynamic_load.cpp @@ -0,0 +1,39 @@ +#include <opentracing/dynamic_load.h> +#include <opentracing/mocktracer/tracer_factory.h> +#include <cstdio> +#include <cstring> +#include <exception> + +static int OpenTracingMakeTracerFactoryFct(const char* opentracing_version, + const char* opentracing_abi_version, + const void** error_category, + void* error_message, + void** tracer_factory) try { + if (opentracing_version == nullptr || opentracing_abi_version == nullptr || + error_category == nullptr || tracer_factory == nullptr) { + fprintf(stderr, + "`opentracing_version`, `opentracing_abi_version`, " + "`error_category`, and `tracer_factory` must be non-null.\n"); + std::terminate(); + } + + if (std::strcmp(opentracing_abi_version, OPENTRACING_ABI_VERSION) != 0) { + *error_category = + static_cast<const void*>(&opentracing::dynamic_load_error_category()); + auto& message = *static_cast<std::string*>(error_message); + message = + "incompatible OpenTracing ABI versions; " + "expected " OPENTRACING_ABI_VERSION " but got "; + message.append(opentracing_abi_version); + return opentracing::incompatible_library_versions_error.value(); + } + + *tracer_factory = new opentracing::mocktracer::MockTracerFactory{}; + + return 0; +} catch (const std::bad_alloc&) { + *error_category = static_cast<const void*>(&std::generic_category()); + return static_cast<int>(std::errc::not_enough_memory); +} + +OPENTRACING_DECLARE_IMPL_FACTORY(OpenTracingMakeTracerFactoryFct); |