diff --git a/interfaces/kits/cj/src/file_grant_permission_ffi.cpp b/interfaces/kits/cj/src/file_grant_permission_ffi.cpp index 52196e019c5689c84da7ac60afb08331c79c88ef..bca6c20e4879150750fd3f73e8a294bbf3d902bd 100644 --- a/interfaces/kits/cj/src/file_grant_permission_ffi.cpp +++ b/interfaces/kits/cj/src/file_grant_permission_ffi.cpp @@ -13,12 +13,12 @@ * limitations under the License. */ -#include "file_grant_permission_ffi.h" - #include "file_permission.h" #include "macro.h" #include "n_error.h" #include "uv.h" +#include "native/ffi_remote_data.h" +#include "file_grant_permission_utils.h" using namespace OHOS::FFI; @@ -60,30 +60,21 @@ int ConvertUVCode2ErrorCode(int errCode) return UNKROWN_ERR; } -CJError ConvertError(int errCode) +int32_t ConvertError(int nativeCode) { - CJError err = { 0, "" }; - int genericCode = ConvertUVCode2ErrorCode(errCode); + int32_t errorCode = 0; + int genericCode = ConvertUVCode2ErrorCode(nativeCode); auto it = errCodeTable.find(genericCode); if (it != errCodeTable.end()) { - err.errorcode = it->second.first; - err.message = it->second.second; + errorCode = it->second.first; } else { - err.errorcode = errCodeTable.at(UNKROWN_ERR).first; - err.message = errCodeTable.at(UNKROWN_ERR).second + ", errno is " + to_string(abs(errCode)); + errorCode = errCodeTable.at(UNKROWN_ERR).first; } - return err; + return errorCode; } -extern "C" { -CArrCPolicyErrorResult FfiOHOSFileGPPersistPermission(CArrCPolicyInfo policies, int32_t* code) +std::vector AddUriPolicyInfo(CArrCPolicyInfo policies) { - CArrCPolicyErrorResult res = { nullptr, 0 }; - if (policies.head == nullptr || code == nullptr) { - LOGE("input is nullptr"); - return res; - } - *code = E_UNKNOWN_ERROR; std::vector uriPolicies; for (int64_t i = 0; i < policies.size; i++) { auto head = policies.head + i; @@ -91,25 +82,23 @@ CArrCPolicyErrorResult FfiOHOSFileGPPersistPermission(CArrCPolicyInfo policies, UriPolicyInfo uriPolicy { .uri = uriStr, .mode = head->mode }; uriPolicies.emplace_back(uriPolicy); } + return uriPolicies; +} - shared_ptr arg = make_shared(); - if (arg == nullptr) { - LOGE("Make_shared is failed"); - return res; - } - arg->errNo = FilePermission::PersistPermission(uriPolicies, arg->errorResults); - CJError err = ConvertError(arg->errNo); - if (err.errorcode != 0) { +int32_t ConvertErrorResult(const shared_ptr& arg, CArrCPolicyErrorResult& res) +{ + int32_t errorCode = ConvertError(arg->errNo); + if (errorCode != 0) { res.size = static_cast(arg->errorResults.size()); if (res.size <= 0) { LOGE("size is less than 0"); - return res; + return E_UNKNOWN_ERROR;; } CPolicyErrorResult* retArrValue = static_cast(malloc(sizeof(CPolicyErrorResult) * res.size)); if (retArrValue == nullptr) { LOGE("malloc is failed"); - return res; + return E_UNKNOWN_ERROR;; } for (int64_t i = 0; i < res.size; i++) { retArrValue[i].uri = MallocCString(arg->errorResults[i].uri); @@ -117,12 +106,13 @@ CArrCPolicyErrorResult FfiOHOSFileGPPersistPermission(CArrCPolicyInfo policies, retArrValue[i].message = MallocCString(arg->errorResults[i].message); } res.head = retArrValue; + retArrValue = nullptr; } - *code = err.errorcode; - return res; + return errorCode; } -CArrCPolicyErrorResult FfiOHOSFileGPRevokePermission(CArrCPolicyInfo policies, int32_t* code) +extern "C" { +FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPPersistPermission(CArrCPolicyInfo policies, int32_t* code) { CArrCPolicyErrorResult res = { nullptr, 0 }; if (policies.head == nullptr || code == nullptr) { @@ -130,13 +120,27 @@ CArrCPolicyErrorResult FfiOHOSFileGPRevokePermission(CArrCPolicyInfo policies, i return res; } *code = E_UNKNOWN_ERROR; - std::vector uriPolicies; - for (int64_t i = 0; i < policies.size; i++) { - auto head = policies.head + i; - std::string uriStr(head->uri); - UriPolicyInfo uriPolicy { .uri = uriStr, .mode = head->mode }; - uriPolicies.emplace_back(uriPolicy); + std::vector uriPolicies = AddUriPolicyInfo(policies); + + shared_ptr arg = make_shared(); + if (arg == nullptr) { + LOGE("Make_shared is failed"); + return res; + } + arg->errNo = FilePermission::PersistPermission(uriPolicies, arg->errorResults); + *code = ConvertErrorResult(arg, res); + return res; +} + +FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPRevokePermission(CArrCPolicyInfo policies, int32_t* code) +{ + CArrCPolicyErrorResult res = { nullptr, 0 }; + if (policies.head == nullptr || code == nullptr) { + LOGE("input is nullptr"); + return res; } + *code = E_UNKNOWN_ERROR; + std::vector uriPolicies = AddUriPolicyInfo(policies); shared_ptr arg = make_shared(); if (arg == nullptr) { @@ -144,31 +148,11 @@ CArrCPolicyErrorResult FfiOHOSFileGPRevokePermission(CArrCPolicyInfo policies, i return res; } arg->errNo = FilePermission::RevokePermission(uriPolicies, arg->errorResults); - CJError err = ConvertError(arg->errNo); - if (err.errorcode != 0) { - res.size = static_cast(arg->errorResults.size()); - if (res.size <= 0) { - LOGE("size is less than 0"); - return res; - } - CPolicyErrorResult* retArrValue = - static_cast(malloc(sizeof(CPolicyErrorResult) * res.size)); - if (retArrValue == nullptr) { - LOGE("malloc is failed"); - return res; - } - for (int64_t i = 0; i < res.size; i++) { - retArrValue[i].uri = MallocCString(arg->errorResults[i].uri); - retArrValue[i].code = arg->errorResults[i].code; - retArrValue[i].message = MallocCString(arg->errorResults[i].message); - } - res.head = retArrValue; - } - *code = err.errorcode; + *code = ConvertErrorResult(arg, res); return res; } -CArrCPolicyErrorResult FfiOHOSFileGPActivatePermission(CArrCPolicyInfo policies, int32_t* code) +FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPActivatePermission(CArrCPolicyInfo policies, int32_t* code) { CArrCPolicyErrorResult res = { nullptr, 0 }; if (policies.head == nullptr || code == nullptr) { @@ -176,13 +160,7 @@ CArrCPolicyErrorResult FfiOHOSFileGPActivatePermission(CArrCPolicyInfo policies, return res; } *code = E_UNKNOWN_ERROR; - std::vector uriPolicies; - for (int64_t i = 0; i < policies.size; i++) { - auto head = policies.head + i; - std::string uriStr(head->uri); - UriPolicyInfo uriPolicy { .uri = uriStr, .mode = head->mode }; - uriPolicies.emplace_back(uriPolicy); - } + std::vector uriPolicies = AddUriPolicyInfo(policies); shared_ptr arg = make_shared(); if (arg == nullptr) { @@ -190,31 +168,11 @@ CArrCPolicyErrorResult FfiOHOSFileGPActivatePermission(CArrCPolicyInfo policies, return res; } arg->errNo = FilePermission::ActivatePermission(uriPolicies, arg->errorResults); - CJError err = ConvertError(arg->errNo); - if (err.errorcode != 0) { - res.size = static_cast(arg->errorResults.size()); - if (res.size <= 0) { - LOGE("size is less than 0"); - return res; - } - CPolicyErrorResult* retArrValue = - static_cast(malloc(sizeof(CPolicyErrorResult) * res.size)); - if (retArrValue == nullptr) { - LOGE("malloc is failed"); - return res; - } - for (int64_t i = 0; i < res.size; i++) { - retArrValue[i].uri = MallocCString(arg->errorResults[i].uri); - retArrValue[i].code = arg->errorResults[i].code; - retArrValue[i].message = MallocCString(arg->errorResults[i].message); - } - res.head = retArrValue; - } - *code = err.errorcode; + *code = ConvertErrorResult(arg, res); return res; } -CArrCPolicyErrorResult FfiOHOSFileGPDeactivatePermission(CArrCPolicyInfo policies, int32_t* code) +FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPDeactivatePermission(CArrCPolicyInfo policies, int32_t* code) { CArrCPolicyErrorResult res = { nullptr, 0 }; if (policies.head == nullptr || code == nullptr) { @@ -222,13 +180,7 @@ CArrCPolicyErrorResult FfiOHOSFileGPDeactivatePermission(CArrCPolicyInfo policie return res; } *code = E_UNKNOWN_ERROR; - std::vector uriPolicies; - for (int64_t i = 0; i < policies.size; i++) { - auto head = policies.head + i; - std::string uriStr(head->uri); - UriPolicyInfo uriPolicy { .uri = uriStr, .mode = head->mode }; - uriPolicies.emplace_back(uriPolicy); - } + std::vector uriPolicies = AddUriPolicyInfo(policies); shared_ptr arg = make_shared(); if (arg == nullptr) { @@ -236,31 +188,11 @@ CArrCPolicyErrorResult FfiOHOSFileGPDeactivatePermission(CArrCPolicyInfo policie return res; } arg->errNo = FilePermission::DeactivatePermission(uriPolicies, arg->errorResults); - CJError err = ConvertError(arg->errNo); - if (err.errorcode != 0) { - res.size = static_cast(arg->errorResults.size()); - if (res.size <= 0) { - LOGE("size is 0"); - return res; - } - CPolicyErrorResult* retArrValue = - static_cast(malloc(sizeof(CPolicyErrorResult) * res.size)); - if (retArrValue == nullptr) { - LOGE("malloc is failed"); - return res; - } - for (int64_t i = 0; i < res.size; i++) { - retArrValue[i].uri = MallocCString(arg->errorResults[i].uri); - retArrValue[i].code = arg->errorResults[i].code; - retArrValue[i].message = MallocCString(arg->errorResults[i].message); - } - res.head = retArrValue; - } - *code = err.errorcode; + *code = ConvertError(arg->errNo); return res; } -CArrBool FfiOHOSFileGPCheckPersistentPermission(CArrCPolicyInfo policies, int32_t* code) +FFI_EXPORT CArrBool FfiOHOSFileGPCheckPersistentPermission(CArrCPolicyInfo policies, int32_t* code) { CArrBool res = { nullptr, 0 }; if (policies.head == nullptr || code == nullptr) { @@ -268,14 +200,7 @@ CArrBool FfiOHOSFileGPCheckPersistentPermission(CArrCPolicyInfo policies, int32_ return res; } *code = E_UNKNOWN_ERROR; - std::vector uriPolicies; - for (int64_t i = 0; i < policies.size; i++) { - auto head = policies.head + i; - - std::string uriStr(head->uri); - UriPolicyInfo uriPolicy { .uri = uriStr, .mode = head->mode }; - uriPolicies.emplace_back(uriPolicy); - } + std::vector uriPolicies = AddUriPolicyInfo(policies); shared_ptr arg = make_shared(); if (arg == nullptr) { @@ -283,7 +208,7 @@ CArrBool FfiOHOSFileGPCheckPersistentPermission(CArrCPolicyInfo policies, int32_ return res; } arg->errNo = FilePermission::CheckPersistentPermission(uriPolicies, arg->resultData); - CJError err = ConvertError(arg->errNo); + int32_t errorcode = ConvertError(arg->errNo); res.size = static_cast(arg->resultData.size()); if (res.size <= 0) { LOGE("size is 0"); @@ -298,11 +223,12 @@ CArrBool FfiOHOSFileGPCheckPersistentPermission(CArrCPolicyInfo policies, int32_ retArrValue[i] = arg->resultData[i]; } res.head = retArrValue; - *code = err.errorcode; + retArrValue = nullptr; + *code = errorcode; return res; } -void FfiOHOSFreeArrBool(CArrBool* tags) +FFI_EXPORT void FfiOHOSFreeArrBool(CArrBool* tags) { if (tags == nullptr || tags->head == nullptr) { LOGE("input is nullptr"); @@ -314,7 +240,7 @@ void FfiOHOSFreeArrBool(CArrBool* tags) tags->size = 0; } -void FfiOHOSFreeArrPolicyErrorResult(CArrCPolicyErrorResult* policies) +FFI_EXPORT void FfiOHOSFreeArrPolicyErrorResult(CArrCPolicyErrorResult* policies) { if (policies == nullptr || policies->head == nullptr) { LOGE("input is nullptr"); diff --git a/interfaces/kits/cj/src/file_grant_permission_ffi.h b/interfaces/kits/cj/src/file_grant_permission_ffi.h deleted file mode 100644 index 164f97257d2449595f60223f87285f0a98d9e5e8..0000000000000000000000000000000000000000 --- a/interfaces/kits/cj/src/file_grant_permission_ffi.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2025 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OHOS_FILE_GRANT_PERMISSION_FFI_H -#define OHOS_FILE_GRANT_PERMISSION_FFI_H - -#include - -#include "file_grant_permission_utils.h" -#include "native/ffi_remote_data.h" - -namespace OHOS { -namespace CJSystemapi { -namespace FileGrantPermission { - -extern "C" { -FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPPersistPermission(CArrCPolicyInfo policies, int32_t* code); -FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPRevokePermission(CArrCPolicyInfo policies, int32_t* code); -FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPActivatePermission(CArrCPolicyInfo policies, int32_t* code); -FFI_EXPORT CArrCPolicyErrorResult FfiOHOSFileGPDeactivatePermission(CArrCPolicyInfo policies, int32_t* code); -FFI_EXPORT CArrBool FfiOHOSFileGPCheckPersistentPermission(CArrCPolicyInfo policies, int32_t* code); -FFI_EXPORT void FfiOHOSFreeArrPolicyErrorResult(CArrCPolicyErrorResult* policise); -FFI_EXPORT void FfiOHOSFreeArrBool(CArrBool* tags); -} -} // namespace FileGrantPermission -} // namespace CJSystemapi -} // namespace OHOS - -#endif // OHOS_FILE_GRANT_PERMISSION_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/src/file_grant_permission_utils.h b/interfaces/kits/cj/src/file_grant_permission_utils.h index 48f16fc9232b47f1356b63ec1632b439f99f6730..a7dbe7f2e333a129929c38f31370309daa9166c4 100644 --- a/interfaces/kits/cj/src/file_grant_permission_utils.h +++ b/interfaces/kits/cj/src/file_grant_permission_utils.h @@ -66,11 +66,6 @@ struct CArrBool { int64_t size; }; -struct CJError { - int32_t errorcode; - std::string message; -}; - enum CommonErrCode { E_UNKNOWN_ERROR = 13900042 };