summaryrefslogtreecommitdiffstats
path: root/mocktracer/src/dynamic_load.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:44:33 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:44:33 +0000
commitb196c6498d22e47bb9d0da0153068ec54eac7956 (patch)
tree1a994a492581e93224a7ee6455f5d4e9d2ec8e59 /mocktracer/src/dynamic_load.cpp
parentInitial commit. (diff)
downloadopentracing-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.cpp39
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);