diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientAsyncProcessFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientAsyncProcessFunctionTest.cpp index 13a887e9778e66381830224820bd0f35c787afca..ebcc51cbbecfc8bd9f92282b2f0332ced1e36214 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientAsyncProcessFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientAsyncProcessFunctionTest.cpp @@ -61,6 +61,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -213,4 +215,4 @@ HWTEST_F(AieClientAsyncProcessFunctionTest, testAieClientAsyncProcessFunction020 HILOGI("[Test]testAieClientAsyncProcessFunction0201."); bool isAsyncProcessInputInfoNull = GetRandomBool(); TestAieClientAsyncProcess(false, isAsyncProcessInputInfoNull, false, false); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientDestroyFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientDestroyFunctionTest.cpp index d3b49de50690f1c9302272daa903bf29bf3db89e..ba37afdd9586f122e116ece641ee042f606b74b0 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientDestroyFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientDestroyFunctionTest.cpp @@ -52,6 +52,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -235,4 +237,4 @@ HWTEST_F(AieClientDestroyFunctionTest, testAieClientDestroyFunction003, Function { HILOGI("[Test]testAieClientDestroyFunction003."); TestAieClientDestroy(true); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientInitFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientInitFunctionTest.cpp index fc58c37f8e707624a0cc9236c65e7d11e058cafe..c7db5ccd35bbc84d924df9def5668e3e2eea17da 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientInitFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientInitFunctionTest.cpp @@ -56,6 +56,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -195,4 +197,4 @@ HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0301, Function | Me HILOGI("[Test]testAieClientInitFunction0301."); bool isAsync = GetRandomBool(); TestAieClientInit(CONFIG_DESCRIPTION, isAsync, false); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientPrepareFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientPrepareFunctionTest.cpp index 7511f517aa9dc908651c24b65cb1359386de69cb..8fad5d6cb0f97d07c6885c0a508d0f14ea9c7a00 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientPrepareFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientPrepareFunctionTest.cpp @@ -55,6 +55,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -276,4 +278,4 @@ HWTEST_F(AieClientPrepareFunctionTest, testAieClientPrepareFunction0204, Functio { HILOGI("[Test]testAieClientPrepareFunction0204."); TestAieClientPrepare(true, true, true, false, false); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientReleaseFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientReleaseFunctionTest.cpp index 02ed51ddf89e7a2311b4714e3d75f204b55aa057..b9903238f40fad4b21e65c92911409c763486c63 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientReleaseFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientReleaseFunctionTest.cpp @@ -52,6 +52,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -225,4 +227,4 @@ HWTEST_F(AieClientReleaseFunctionTest, testAieClientReleaseFunction004, Function { HILOGI("[Test]testAieClientReleaseFunction004."); TestAieClientRelease(true, true); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSetOptionFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSetOptionFunctionTest.cpp index 7590e8467105a5f0b4beabc445f25790938a80e8..bcf5a31ab31100c0b8da8306ed3ffed56e67775d 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSetOptionFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSetOptionFunctionTest.cpp @@ -60,6 +60,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -325,4 +327,4 @@ HWTEST_F(AieClientSetOptionFunctionTest, testAieClientSetOptionFunction0202, Fun HILOGI("[Test]testAieClientSetOptionFunction0202."); bool isAsync = GetRandomBool(); TestAieClientSetOptionWithoutPrepare(isAsync, false); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSyncProcessFunctionTest.cpp b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSyncProcessFunctionTest.cpp index b1bd26f76fed32edad99a69290f27ace04549410..09dfde2ccdb585b15088f7ab9bcc331b38dfc02f 100644 --- a/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSyncProcessFunctionTest.cpp +++ b/ai_lite/ai_engine_posix/base/src/aie_client/AieClientSyncProcessFunctionTest.cpp @@ -56,6 +56,8 @@ static void GetClientInfo(ClientInfo &clientInfo) .clientVersion = CLIENT_VERSION_VALID, .clientId = INVALID_CLIENT_ID, .sessionId = INVALID_SESSION_ID, + .serverUid = INVALID_UID, + .clientUid = INVALID_UID, .extendLen = len, .extendMsg = (unsigned char*)extendMsg, }; @@ -213,4 +215,4 @@ HWTEST_F(AieClientSyncProcessFunctionTest, testAieClientSyncProcessFunction0201, HILOGI("[Test]testAieClientSyncProcessFunction0201."); bool isSyncProcessInputInfoNull = GetRandomBool(); TestAieClientSyncProcess(true, isSyncProcessInputInfoNull, false, false); -} \ No newline at end of file +} diff --git a/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_1.h b/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_1.h index 9a777acc31ef82e045a7ebe33e113c6ae5c1c4fb..98b0d397ef1306a405b659bbc00fab67ce992c5e 100644 --- a/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_1.h +++ b/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_1.h @@ -16,24 +16,15 @@ #ifndef SAMPLE_PLUGIN_1_H #define SAMPLE_PLUGIN_1_H -#include - #include "plugin/i_plugin.h" namespace OHOS { namespace AI { class SamplePlugin1 : public IPlugin { - const long long ALG_VERSION = 1; - const char *ALG_NAME = "SAMPLE_PLUGIN_1"; - const char * const PLUGIN_INFER_MODEL = "SYNC"; - const char *DEFAULT_OPTION_DATA = "default option data"; - unsigned char *optionData = nullptr; - int optionLength = 0; - public: SamplePlugin1(); - ~SamplePlugin1(); + ~SamplePlugin1() override; const long long GetVersion() const override; @@ -52,6 +43,9 @@ public: int SetOption(int optionType, const DataInfo &inputInfo) override; int GetOption(int optionType, const DataInfo &inputInfo, DataInfo &outputInfo) override; + +private: + DataInfo optionData_ {}; }; } } diff --git a/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_2.h b/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_2.h index a8169e77f49ea4039d80d6d303bcc0f90074d48c..27b5fd571005d7101c6f9d9e15f13d8e4de9fa6d 100644 --- a/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_2.h +++ b/ai_lite/ai_engine_posix/base/src/sample/include/sample_plugin_2.h @@ -23,17 +23,10 @@ namespace OHOS { namespace AI { class SamplePlugin2 : public IPlugin { - const long long ALG_VERSION = 1; - const char *ALG_NAME = "SAMPLE_PLUGIN_2"; - const char * const PLUGIN_INFER_MODEL = "ASYNC"; - const char *DEFAULT_OPTION_DATA = "default option data"; - unsigned char *optionData = nullptr; - int optionLength = 0; - public: SamplePlugin2(); - ~SamplePlugin2(); + ~SamplePlugin2() override; const long long GetVersion() const override; @@ -52,6 +45,9 @@ public: int SetOption(int optionType, const DataInfo &inputInfo) override; int GetOption(int optionType, const DataInfo &inputInfo, DataInfo &outputInfo) override; + +private: + DataInfo optionData_ {}; }; } } diff --git a/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_1.cpp b/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_1.cpp index 4d642b0687335539fa8e57f6cacf6cfd1de8eab5..9aab7f11cecf0ef9cbbd9abd4eaa308221bd838b 100644 --- a/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_1.cpp +++ b/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_1.cpp @@ -24,15 +24,53 @@ namespace OHOS { namespace AI { +namespace { +constexpr long long ALG_VERSION = 1; +const char *ALG_NAME = "SAMPLE_PLUGIN_1"; +const char * const PLUGIN_INFER_MODEL = "SYNC"; +const char * const DEFAULT_PROCESS_STRING = "sample_plugin_1 SyncProcess default data"; + +void FreeDataInfo(DataInfo *dataInfo) +{ + if (dataInfo != nullptr && dataInfo->data != nullptr) { + free(dataInfo->data); + dataInfo->data = nullptr; + dataInfo->length = 0; + } +} + +int ReturnDataCopyOrDefaultData(const DataInfo &inputInfo, DataInfo &outputInfo) +{ + errno_t retCode; + DataInfo sourceData {}; + if (inputInfo.length <= 0 || inputInfo.data == nullptr) { + sourceData.data = reinterpret_cast(const_cast(DEFAULT_PROCESS_STRING)); + sourceData.length = strlen(DEFAULT_PROCESS_STRING) + 1; + } else { + sourceData = inputInfo; + } + + outputInfo.length = sourceData.length; + outputInfo.data = reinterpret_cast(malloc(sourceData.length)); + if (outputInfo.data == nullptr) { + HILOGE("[SamplePlugin1]malloc failed."); + return RETCODE_FAILURE; + } + retCode = memcpy_s(outputInfo.data, outputInfo.length, sourceData.data, sourceData.length); + if (retCode != EOK) { + HILOGE("[SamplePlugin1]memcpy_s failed[%d].", retCode); + FreeDataInfo(&outputInfo); + return RETCODE_FAILURE; + } + return RETCODE_SUCCESS; +} +} // anonymous namespace + SamplePlugin1::SamplePlugin1() = default; SamplePlugin1::~SamplePlugin1() { - if (optionData != nullptr) { - free(optionData); - optionData = nullptr; - optionLength = 0; - } + FreeDataInfo(&optionData_); } const long long SamplePlugin1::GetVersion() const @@ -53,116 +91,53 @@ const char *SamplePlugin1::GetInferMode() const int SamplePlugin1::SyncProcess(IRequest *request, IResponse *&response) { DataInfo inputInfo = request->GetMsg(); - if (inputInfo.data != nullptr) { - HILOGE("[SamplePlugin2]inputInfo data is %p.", inputInfo.data); + if (inputInfo.data != nullptr && inputInfo.length <= 0) { + HILOGE("[SamplePlugin1]inputInfo data is invalid."); + return RETCODE_FAILURE; } + response = IResponse::Create(request); CHK_RET(response == nullptr, RETCODE_FAILURE); - const char *str = "sample_plugin_1 SyncProcess outputInfo"; - char *outputData = const_cast(str); - int len = strlen(str) + 1; - DataInfo outputInfo = { - .data = (unsigned char*)outputData, - .length = len, - }; + DataInfo outputInfo {}; + int retCode = ReturnDataCopyOrDefaultData(inputInfo, outputInfo); + response->SetResult(outputInfo); - response->SetRetCode(RETCODE_SUCCESS); - return RETCODE_SUCCESS; + response->SetRetCode(retCode); + return retCode; } int SamplePlugin1::AsyncProcess(IRequest *request, IPluginCallback *callback) { - DataInfo inputInfo = request->GetMsg(); - if (inputInfo.data != nullptr) { - HILOGE("[SamplePlugin2]inputInfo data is %p.", inputInfo.data); - } - IResponse *response = IResponse::Create(request); - CHK_RET(response == nullptr, RETCODE_FAILURE); - - const char *str = "sample_plugin_1 AsyncProcess outputInfo"; - char *outputData = const_cast(str); - int len = strlen(str) + 1; - DataInfo outputInfo = { - .data = (unsigned char*)outputData, - .length = len, - }; - response->SetResult(outputInfo); - response->SetRetCode(RETCODE_SUCCESS); - int retCode = callback->OnEvent(ON_PLUGIN_SUCCEED, response); - return retCode; + HILOGE("[SamplePlugin1]Sync plugin, can't run AsyncProcess."); + return RETCODE_FAILURE; } int SamplePlugin1::Prepare(long long transactionId, const DataInfo &inputInfo, DataInfo &outputInfo) { - const char *str = "sample_plugin_1 Prepare outputInfo"; - char *outputData = const_cast(str); - int len = strlen(str) + 1; - outputInfo = { - .data = (unsigned char*)outputData, - .length = len, - }; - return RETCODE_SUCCESS; + return ReturnDataCopyOrDefaultData(inputInfo, outputInfo); } int SamplePlugin1::Release(bool isFullUnload, long long transactionId, const DataInfo &inputInfo) { - if (optionData != nullptr) { - free(optionData); - optionData = nullptr; - optionLength = 0; - } + FreeDataInfo(&optionData_); return RETCODE_SUCCESS; } int SamplePlugin1::SetOption(int optionType, const DataInfo &inputInfo) { - if (optionData != nullptr) { - free(optionData); - optionData = nullptr; - optionLength = 0; - } + FreeDataInfo(&optionData_); + if (inputInfo.data == nullptr) { return RETCODE_SUCCESS; } - optionLength = inputInfo.length; - optionData = (unsigned char *)malloc(sizeof(unsigned char) * optionLength); - if (optionData == nullptr) { - HILOGE("[SamplePlugin1]Failed to request memory."); - return RETCODE_OUT_OF_MEMORY; - } - errno_t retCode = memcpy_s(optionData, optionLength, inputInfo.data, optionLength); - if (retCode != EOK) { - HILOGE("[SamplePlugin1]Failed to memory copy, retCode[%d].", retCode); - free(optionData); - optionData = nullptr; - return RETCODE_MEMORY_COPY_FAILURE; - } - return RETCODE_SUCCESS; + + return ReturnDataCopyOrDefaultData(inputInfo, optionData_); } int SamplePlugin1::GetOption(int optionType, const DataInfo &inputInfo, DataInfo &outputInfo) { - if (optionData == nullptr) { - optionLength = strlen(DEFAULT_OPTION_DATA) + 1; - optionData = (unsigned char *)malloc(sizeof(unsigned char) * optionLength); - if (optionData == nullptr) { - HILOGE("[SamplePlugin1]Failed to request memory."); - return RETCODE_OUT_OF_MEMORY; - } - errno_t retCode = memcpy_s(optionData, optionLength, DEFAULT_OPTION_DATA, optionLength); - if (retCode != EOK) { - HILOGE("[SamplePlugin1]Failed to memory copy, retCode[%d].", retCode); - free(optionData); - optionData = nullptr; - return RETCODE_MEMORY_COPY_FAILURE; - } - } - outputInfo = { - .data = optionData, - .length = optionLength - }; - return RETCODE_SUCCESS; + return ReturnDataCopyOrDefaultData(optionData_, outputInfo); } PLUGIN_INTERFACE_IMPL(SamplePlugin1); diff --git a/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_2.cpp b/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_2.cpp index 9b87c9a28a106088933d5a09768e2a5406a4614a..c2046b02e1481b44664e1edac1c7ffbc11c06368 100644 --- a/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_2.cpp +++ b/ai_lite/ai_engine_posix/base/src/sample/source/sample_plugin_2.cpp @@ -24,15 +24,53 @@ namespace OHOS { namespace AI { +namespace { +constexpr long long ALG_VERSION = 1; +const char *ALG_NAME = "SAMPLE_PLUGIN_2"; +const char * const PLUGIN_INFER_MODEL = "ASYNC"; +const char * const DEFAULT_PROCESS_STRING = "sample_plugin_2 AsyncProcess default data"; + +void FreeDataInfo(DataInfo *dataInfo) +{ + if (dataInfo != nullptr && dataInfo->data != nullptr) { + free(dataInfo->data); + dataInfo->data = nullptr; + dataInfo->length = 0; + } +} + +int ReturnDataCopyOrDefaultData(const DataInfo &inputInfo, DataInfo &outputInfo) +{ + errno_t retCode; + DataInfo sourceData {}; + if (inputInfo.length <= 0 || inputInfo.data == nullptr) { + sourceData.data = reinterpret_cast(const_cast(DEFAULT_PROCESS_STRING)); + sourceData.length = strlen(DEFAULT_PROCESS_STRING) + 1; + } else { + sourceData = inputInfo; + } + + outputInfo.length = sourceData.length; + outputInfo.data = reinterpret_cast(malloc(sourceData.length)); + if (outputInfo.data == nullptr) { + HILOGE("[SamplePlugin2]malloc failed."); + return RETCODE_FAILURE; + } + retCode = memcpy_s(outputInfo.data, outputInfo.length, sourceData.data, sourceData.length); + if (retCode != EOK) { + HILOGE("[SamplePlugin2]memcpy_s failed[%d].", retCode); + FreeDataInfo(&outputInfo); + return RETCODE_FAILURE; + } + return RETCODE_SUCCESS; +} +} // anonymous namespace + SamplePlugin2::SamplePlugin2() = default; SamplePlugin2::~SamplePlugin2() { - if (optionData != nullptr) { - free(optionData); - optionData = nullptr; - optionLength = 0; - } + FreeDataInfo(&optionData_); } const long long SamplePlugin2::GetVersion() const @@ -52,117 +90,54 @@ const char *SamplePlugin2::GetInferMode() const int SamplePlugin2::SyncProcess(IRequest *request, IResponse *&response) { - DataInfo inputInfo = request->GetMsg(); - if (inputInfo.data != nullptr) { - HILOGE("[SamplePlugin2]inputInfo data is %p.", inputInfo.data); - } - response = IResponse::Create(request); - CHK_RET(response == nullptr, RETCODE_FAILURE); - - const char *str = "sample_plugin_2 Process outputInfo"; - char *outputData = const_cast(str); - int len = strlen(str) + 1; - DataInfo outputInfo = { - .data = (unsigned char*)outputData, - .length = len, - }; - response->SetResult(outputInfo); - response->SetRetCode(RETCODE_SUCCESS); - return RETCODE_SUCCESS; + HILOGE("[SamplePlugin2]Async plugin, can't run SyncProcess."); + return RETCODE_FAILURE; } int SamplePlugin2::AsyncProcess(IRequest *request, IPluginCallback *callback) { DataInfo inputInfo = request->GetMsg(); - if (inputInfo.data != nullptr) { - HILOGE("[SamplePlugin2]inputInfo data is %p.", inputInfo.data); + if (inputInfo.data != nullptr && inputInfo.length <= 0) { + HILOGE("[SamplePlugin2]inputInfo data is invalid."); + return RETCODE_FAILURE; } + IResponse *response = IResponse::Create(request); CHK_RET(response == nullptr, RETCODE_FAILURE); - const char *str = "sample_plugin_2 AsyncProcess outputInfo"; - char *outputData = const_cast(str); - int len = strlen(str) + 1; - DataInfo outputInfo = { - .data = (unsigned char*)outputData, - .length = len, - }; + DataInfo outputInfo {}; + int retCode = ReturnDataCopyOrDefaultData(inputInfo, outputInfo); + response->SetResult(outputInfo); - response->SetRetCode(RETCODE_SUCCESS); - int retCode = callback->OnEvent(ON_PLUGIN_SUCCEED, response); - return retCode; + response->SetRetCode(retCode); + return callback->OnEvent(ON_PLUGIN_SUCCEED, response); } int SamplePlugin2::Prepare(long long transactionId, const DataInfo &inputInfo, DataInfo &outputInfo) { - const char *str = "sample_plugin_2 Prepare outputInfo"; - char *outputData = const_cast(str); - int len = strlen(str) + 1; - outputInfo = { - .data = (unsigned char*)outputData, - .length = len, - }; - return RETCODE_SUCCESS; + return ReturnDataCopyOrDefaultData(inputInfo, outputInfo); } int SamplePlugin2::Release(bool isFullUnload, long long transactionId, const DataInfo &inputInfo) { - if (optionData != nullptr) { - free(optionData); - optionData = nullptr; - optionLength = 0; - } + FreeDataInfo(&optionData_); return RETCODE_SUCCESS; } int SamplePlugin2::SetOption(int optionType, const DataInfo &inputInfo) { - if (optionData != nullptr) { - free(optionData); - optionData = nullptr; - optionLength = 0; - } + FreeDataInfo(&optionData_); + if (inputInfo.data == nullptr) { return RETCODE_SUCCESS; } - optionLength = inputInfo.length; - optionData = (unsigned char *)malloc(sizeof(unsigned char) * optionLength); - if (optionData == nullptr) { - HILOGE("[SamplePlugin2]Failed to request memory."); - return RETCODE_OUT_OF_MEMORY; - } - errno_t retCode = memcpy_s(optionData, optionLength, inputInfo.data, optionLength); - if (retCode != EOK) { - HILOGE("[SamplePlugin2]Failed to memory copy, retCode[%d].", retCode); - free(optionData); - optionData = nullptr; - return RETCODE_MEMORY_COPY_FAILURE; - } - return RETCODE_SUCCESS; + + return ReturnDataCopyOrDefaultData(inputInfo, optionData_); } int SamplePlugin2::GetOption(int optionType, const DataInfo &inputInfo, DataInfo &outputInfo) { - if (optionData == nullptr) { - optionLength = strlen(DEFAULT_OPTION_DATA) + 1; - optionData = (unsigned char *)malloc(sizeof(unsigned char) * optionLength); - if (optionData == nullptr) { - HILOGE("[SamplePlugin1]Failed to request memory."); - return RETCODE_OUT_OF_MEMORY; - } - errno_t retCode = memcpy_s(optionData, optionLength, DEFAULT_OPTION_DATA, optionLength); - if (retCode != EOK) { - HILOGE("[SamplePlugin1]Failed to memory copy, retCode[%d].", retCode); - free(optionData); - optionData = nullptr; - return RETCODE_MEMORY_COPY_FAILURE; - } - } - outputInfo = { - .data = optionData, - .length = optionLength - }; - return RETCODE_SUCCESS; + return ReturnDataCopyOrDefaultData(optionData_, outputInfo); } PLUGIN_INTERFACE_IMPL(SamplePlugin2);