diff --git a/src/lib/include/obelisk_c.h b/src/lib/include/obelisk_c.h index 616b7e2..437d088 100644 --- a/src/lib/include/obelisk_c.h +++ b/src/lib/include/obelisk_c.h @@ -1,25 +1,47 @@ #ifndef OBELISK_INCLUDE_OBELISK_PROGRAM_H #define OBELISK_INCLUDE_OBELISK_PROGRAM_H +/** + * @brief Struct wrapper around Obelisk class. + * + */ +typedef struct CObelisk CObelisk; + #ifdef __cplusplus extern "C" { #endif + /** + * @brief Create an obelisk object. + * + * @return CObelisk* Returns an obelisk object. + */ + extern CObelisk* obelisk_open(); + + /** + * @brief Delete an obelisk object. + * + * @param[in] obelisk The obelisk object. + */ + extern void obelisk_close(CObelisk* obelisk); + /** * @brief Get the obelisk version. * + * @param[in] obelisk The obelisk object. * @return const char* Returns a string containing the version. This must be * freed by the caller. */ - extern const char* obelisk_get_version(); + extern char* obelisk_get_version(CObelisk* obelisk); /** * @brief Get the obelisk library so version. * + * @param[in] obelisk The obelisk object. * @return int Returns the so version. */ - extern int obelisk_get_lib_version(); + extern int obelisk_get_lib_version(CObelisk* obelisk); #ifdef __cplusplus }; diff --git a/src/lib/obelisk.c b/src/lib/obelisk.c index 228d9d2..5d959b7 100644 --- a/src/lib/obelisk.c +++ b/src/lib/obelisk.c @@ -4,20 +4,22 @@ #include #include -const char* obelisk_get_version() +CObelisk* obelisk_open() { - CObelisk* obelisk = create_obelisk(); - size_t len = strlen(call_obelisk_getVersion(obelisk)) + 1; - char* version = malloc(len); - memcpy(version, call_obelisk_getVersion(obelisk), len); - destroy_obelisk(obelisk); - return version; + return create_obelisk(); } -int obelisk_get_lib_version() +void obelisk_close(CObelisk* obelisk) { - CObelisk* obelisk = create_obelisk(); - int version = call_obelisk_getLibVersion(obelisk); destroy_obelisk(obelisk); - return version; +} + +char* obelisk_get_version(CObelisk* obelisk) +{ + return call_obelisk_getVersion(obelisk); +} + +int obelisk_get_lib_version(CObelisk* obelisk) +{ + return call_obelisk_getLibVersion(obelisk); } diff --git a/src/lib/obelisk_wrapper.cpp b/src/lib/obelisk_wrapper.cpp index 0720ae1..625609b 100644 --- a/src/lib/obelisk_wrapper.cpp +++ b/src/lib/obelisk_wrapper.cpp @@ -1,6 +1,8 @@ #include "obelisk.h" #include "obelisk_wrapper.h" +#include + extern "C" { CObelisk* create_obelisk() @@ -9,11 +11,12 @@ extern "C" return reinterpret_cast(obelisk); } - const char* call_obelisk_getVersion(CObelisk* p_obelisk) + char* call_obelisk_getVersion(CObelisk* p_obelisk) { obelisk::Obelisk* obelisk = reinterpret_cast(p_obelisk); - return obelisk->getVersion().c_str(); + auto version = strdup(obelisk->getVersion().c_str()); + return version; } int call_obelisk_getLibVersion(CObelisk* p_obelisk) diff --git a/src/lib/include/obelisk_wrapper.h b/src/lib/obelisk_wrapper.h similarity index 82% rename from src/lib/include/obelisk_wrapper.h rename to src/lib/obelisk_wrapper.h index 737c129..c697816 100644 --- a/src/lib/include/obelisk_wrapper.h +++ b/src/lib/obelisk_wrapper.h @@ -1,7 +1,7 @@ #ifndef OBELISK_INCLUDE_OBELISK_WRAPPER_H #define OBELISK_INCLUDE_OBELISK_WRAPPER_H -typedef struct CObelisk CObelisk; +#include "include/obelisk_c.h" #ifdef __cplusplus extern "C" @@ -19,9 +19,10 @@ extern "C" * @brief Calls the obelisk method getVersion. * * @param[in] p_obelisk The obelisk object pointer. - * @return const char* Returns the version. Must be freed by caller. + * @return const char* Returns the version. This must be freed by the + * caller. */ - const char *call_obelisk_getVersion(CObelisk *p_obelisk); + char *call_obelisk_getVersion(CObelisk *p_obelisk); /** * @brief Calls the obelisk method getLibVersion.