mirror of
https://github.com/openharmony/developtools_syscap_codec.git
synced 2026-08-27 02:11:19 -04:00
@@ -94,10 +94,14 @@ ohos_shared_library("syscap_tool_shared") {
|
||||
part_name = "syscap_codec"
|
||||
}
|
||||
|
||||
config("syscap_interface_public_config") {
|
||||
include_dirs = [ "./interfaces/inner_api/" ]
|
||||
}
|
||||
|
||||
if (defined(ohos_lite)) {
|
||||
shared_library("syscap_interface_shared") {
|
||||
include_dirs = [ "./interfaces/inner_api/" ]
|
||||
public_configs = [ ":pubilc" ]
|
||||
include_dirs = [ "include" ]
|
||||
public_configs = [ ":syscap_interface_public_config" ]
|
||||
sources = [ "./interfaces/inner_api/syscap_interface.c" ]
|
||||
|
||||
deps = [
|
||||
@@ -107,8 +111,8 @@ if (defined(ohos_lite)) {
|
||||
}
|
||||
} else {
|
||||
ohos_shared_library("syscap_interface_shared") {
|
||||
include_dirs = [ "./interfaces/inner_api/" ]
|
||||
public_configs = [ ":pubilc" ]
|
||||
include_dirs = [ "include" ]
|
||||
public_configs = [ ":syscap_interface_public_config" ]
|
||||
sources = [ "./interfaces/inner_api/syscap_interface.c" ]
|
||||
|
||||
deps = [
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <securec.h>
|
||||
#include "create_pcid.h"
|
||||
#include "syscap_define.h"
|
||||
#include "syscap_interface.h"
|
||||
|
||||
@@ -85,65 +84,58 @@ static uint32_t GetFileContext(char **contextBufPtr, uint32_t *bufferLen)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool EncodeOsSyscap(int **output)
|
||||
bool EncodeOsSyscap(char output[128])
|
||||
{
|
||||
int32_t ret;
|
||||
int32_t res;
|
||||
char *contextBuffer = NULL;
|
||||
int *outputArray = NULL;
|
||||
uint32_t bufferLen;
|
||||
|
||||
ret = GetFileContext(&contextBuffer, &bufferLen);
|
||||
if (ret != 0) {
|
||||
PRINT_ERR("GetFileContext failed, input file : rk3568.sc\n");
|
||||
PRINT_ERR("GetFileContext failed, input file : /system/etc/PCID.sc\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
outputArray = (int *)malloc(PCID_MAIN_LEN);
|
||||
if (outputArray == NULL) {
|
||||
PRINT_ERR("malloc buffer failed, size = %d\n", PCID_MAIN_LEN);
|
||||
return false;
|
||||
}
|
||||
(void)memset_s(outputArray, PCID_MAIN_LEN, 0, PCID_MAIN_LEN);
|
||||
|
||||
res = memcpy_s(outputArray, PCID_MAIN_LEN, contextBuffer, PCID_MAIN_LEN);
|
||||
res = memcpy_s(output, PCID_MAIN_LEN, contextBuffer, PCID_MAIN_LEN);
|
||||
if (res != 0) {
|
||||
PRINT_ERR("memcpy_s failed.");
|
||||
FreeContextBuffer(contextBuffer);
|
||||
free(outputArray);
|
||||
return false;
|
||||
}
|
||||
|
||||
FreeContextBuffer(contextBuffer);
|
||||
*output = outputArray;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EncodePrivateSyscap(char **output, int *outputLen)
|
||||
{
|
||||
int32_t ret;
|
||||
int32_t res;
|
||||
char *contextBuffer = NULL;
|
||||
char *outputStr = NULL;
|
||||
uint32_t bufferLen;
|
||||
|
||||
ret = GetFileContext(&contextBuffer, &bufferLen);
|
||||
if (ret != 0) {
|
||||
PRINT_ERR("GetFileContext failed, input file : rk3568.sc\n");
|
||||
PRINT_ERR("GetFileContext failed, input file : /system/etc/PCID.sc\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
*outputLen = bufferLen - MAX_SYSCAP_STR_LEN - 1;
|
||||
*outputLen = bufferLen - PCID_MAIN_LEN - 1;
|
||||
outputStr = (char *)malloc(*outputLen);
|
||||
if (outputStr == NULL) {
|
||||
PRINT_ERR("malloc buffer failed, size = %d, errno = %d\n", *outputLen, errno);
|
||||
*outputLen = 0;
|
||||
return false;
|
||||
}
|
||||
(void)memset_s(outputStr, *outputLen, 0, *outputLen);
|
||||
res = strncpy_s(outputStr, *outputLen + 1, contextBuffer + MAX_SYSCAP_STR_LEN, *outputLen);
|
||||
if (res != 0) {
|
||||
|
||||
ret = strncpy_s(outputStr, *outputLen, contextBuffer + PCID_MAIN_LEN, *outputLen);
|
||||
if (ret != 0) {
|
||||
PRINT_ERR("strcpy_s failed.");
|
||||
FreeContextBuffer(contextBuffer);
|
||||
free(outputStr);
|
||||
*outputLen = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -152,13 +144,14 @@ bool EncodePrivateSyscap(char **output, int *outputLen)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DecodeOsSyscap(int input[32], char (**output)[128], int *outputCnt)
|
||||
bool DecodeOsSyscap(char input[128], char (**output)[128], int *outputCnt)
|
||||
{
|
||||
errno_t nRet = 0;
|
||||
uint16_t indexOfSyscap[OS_SYSCAP_BYTES * OS_SYSCAP_BYTES] = {0};
|
||||
int countOfSyscap = 0, i, j;
|
||||
uint16_t indexOfSyscap[BITS_OF_BYTE * OS_SYSCAP_BYTES] = {0};
|
||||
uint16_t countOfSyscap = 0;
|
||||
uint16_t i, j;
|
||||
|
||||
uint8_t *osSyscap = (uint8_t *)(input + 2); // 2, int[2] of pcid header
|
||||
uint8_t *osSyscap = (uint8_t *)(input + 8); // 8, int[2] of pcid header
|
||||
|
||||
for (i = 0; i < OS_SYSCAP_BYTES; i++) {
|
||||
for (j = 0; j < BITS_OF_BYTE; j++) {
|
||||
@@ -170,7 +163,7 @@ bool DecodeOsSyscap(int input[32], char (**output)[128], int *outputCnt)
|
||||
|
||||
*outputCnt = countOfSyscap;
|
||||
char (*strSyscap)[MAX_SYSCAP_STR_LEN] = NULL;
|
||||
strSyscap= (char (*)[MAX_SYSCAP_STR_LEN])malloc(countOfSyscap * MAX_SYSCAP_STR_LEN);
|
||||
strSyscap = (char (*)[MAX_SYSCAP_STR_LEN])malloc(countOfSyscap * MAX_SYSCAP_STR_LEN);
|
||||
if (strSyscap == NULL) {
|
||||
PRINT_ERR("malloc failed.");
|
||||
*outputCnt = 0;
|
||||
@@ -178,7 +171,7 @@ bool DecodeOsSyscap(int input[32], char (**output)[128], int *outputCnt)
|
||||
}
|
||||
(void)memset_s(strSyscap, countOfSyscap * MAX_SYSCAP_STR_LEN, \
|
||||
0, countOfSyscap * MAX_SYSCAP_STR_LEN);
|
||||
char **strSyscapBak = (char **)strSyscap;
|
||||
*output = strSyscap;
|
||||
|
||||
for (i = 0; i < countOfSyscap; i++) {
|
||||
for (j = 0; j < sizeof(arraySyscap) / sizeof(SyscapWithNum); j++) {
|
||||
@@ -188,6 +181,7 @@ bool DecodeOsSyscap(int input[32], char (**output)[128], int *outputCnt)
|
||||
printf("strcpy_s failed. error = %d\n", nRet);
|
||||
*outputCnt = 0;
|
||||
free(strSyscap);
|
||||
strSyscap = NULL;
|
||||
return false;
|
||||
}
|
||||
strSyscap++;
|
||||
@@ -196,55 +190,56 @@ bool DecodeOsSyscap(int input[32], char (**output)[128], int *outputCnt)
|
||||
}
|
||||
}
|
||||
|
||||
*output = (char (*)[MAX_SYSCAP_STR_LEN])strSyscapBak;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DecodePrivateSyscap(char *input, char (**output)[128], int *outputCnt)
|
||||
{
|
||||
char (*outputArray)[MAX_SYSCAP_STR_LEN] = NULL;
|
||||
char *inputStr = input;
|
||||
char *inputPos = input;
|
||||
uint16_t bufferLen;
|
||||
int syscapCnt = 0, ret;
|
||||
int ret;
|
||||
int syscapCnt = 0;
|
||||
|
||||
while (*inputStr != '\0') {
|
||||
if (*inputStr == ',') {
|
||||
while (*inputPos != '\0') {
|
||||
if (*inputPos == ',') {
|
||||
syscapCnt++;
|
||||
}
|
||||
inputStr++;
|
||||
inputPos++;
|
||||
}
|
||||
inputStr = input;
|
||||
inputPos = input;
|
||||
|
||||
bufferLen = MAX_SYSCAP_STR_LEN * syscapCnt;
|
||||
outputArray = (char (*)[MAX_SYSCAP_STR_LEN])malloc(bufferLen);
|
||||
if (outputArray == NULL) {
|
||||
PRINT_ERR("malloc buffer failed, size = %d, errno = %d\n", bufferLen, errno);
|
||||
syscapCnt = 0;
|
||||
*outputCnt = 0;
|
||||
return false;
|
||||
}
|
||||
(void)memset_s(outputArray, bufferLen, 0, bufferLen);
|
||||
char **outputArrayBak = (char **)outputArray;
|
||||
char priSyscapStr[MAX_SYSCAP_STR_LEN - 17] = {0}; // 17. size of "SystemCapability."
|
||||
char *tempPriSyscapStr = priSyscapStr;
|
||||
while (*inputStr != '\0') {
|
||||
if (*inputStr == ',') {
|
||||
*tempPriSyscapStr = '\0';
|
||||
ret = sprintf_s(*outputArray, MAX_SYSCAP_STR_LEN, "SystemCapability.%s", priSyscapStr);
|
||||
|
||||
*output = outputArray;
|
||||
char buffer[MAX_SYSCAP_STR_LEN - 17] = {0}; // 17. size of "SystemCapability."
|
||||
char *bufferPos = buffer;
|
||||
while (*inputPos != '\0') {
|
||||
if (*inputPos == ',') {
|
||||
*bufferPos = '\0';
|
||||
ret = sprintf_s(*outputArray, MAX_SYSCAP_STR_LEN, "SystemCapability.%s", buffer);
|
||||
if (ret == -1) {
|
||||
PRINT_ERR("sprintf_s failed\n");
|
||||
*outputCnt = 0;
|
||||
free(outputArray);
|
||||
outputArray = NULL;
|
||||
return false;
|
||||
}
|
||||
tempPriSyscapStr = priSyscapStr;
|
||||
bufferPos = buffer;
|
||||
outputArray++;
|
||||
inputStr++;
|
||||
inputPos++;
|
||||
continue;
|
||||
}
|
||||
*tempPriSyscapStr++ = *inputStr++;
|
||||
*bufferPos++ = *inputPos++;
|
||||
}
|
||||
|
||||
*outputCnt = syscapCnt;
|
||||
*output = (char (*)[MAX_SYSCAP_STR_LEN])outputArrayBak;
|
||||
return true;
|
||||
}
|
||||
@@ -25,8 +25,8 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
bool EncodeOsSyscap(int **output);
|
||||
bool DecodeOsSyscap(int input[32], char (**output)[128], int *outputCnt);
|
||||
bool EncodeOsSyscap(char output[128]);
|
||||
bool DecodeOsSyscap(char input[128], char (**output)[128], int *outputCnt);
|
||||
bool EncodePrivateSyscap(char **output, int *outputLen);
|
||||
bool DecodePrivateSyscap(char *input, char (**output)[128], int *outputCnt);
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ static char* getSystemCapability()
|
||||
bool retBool;
|
||||
int retError, priOutputLen, priCapArrayCnt, sumLen;
|
||||
int i = 0;
|
||||
int *osOutput = nullptr;
|
||||
char osOutput[128] = {};
|
||||
errno_t err = EOK;
|
||||
uint32_t *osCapU32 = nullptr;
|
||||
char *priOutput = nullptr;
|
||||
@@ -70,10 +70,10 @@ static char* getSystemCapability()
|
||||
char osCapArray[OS_SYSCAP_U32_NUM][U32_TO_STR_MAX_LEN] = {};
|
||||
char (*priCapArray)[SYSCAP_STR_MAX_LEN] = nullptr;
|
||||
|
||||
retBool = EncodeOsSyscap(&osOutput);
|
||||
retBool = EncodeOsSyscap(osOutput);
|
||||
if (!retBool) {
|
||||
PRINT_ERR("get encoded os syscap failed.");
|
||||
goto FREE_OSOUTPUT;
|
||||
return nullptr;
|
||||
}
|
||||
retBool = EncodePrivateSyscap(&priOutput, &priOutputLen);
|
||||
if (!retBool) {
|
||||
@@ -81,7 +81,7 @@ static char* getSystemCapability()
|
||||
goto FREE_PRIOUTPUT;
|
||||
}
|
||||
|
||||
osCapU32 = reinterpret_cast<uint32_t *>(osOutput + 2); // 2, header of pcid.sc
|
||||
osCapU32 = reinterpret_cast<uint32_t *>(osOutput + 8); // 8, header of pcid.sc
|
||||
for (i = 0; i < OS_SYSCAP_U32_NUM; i++) {
|
||||
retError = sprintf_s(osCapArray[i], U32_TO_STR_MAX_LEN, "%u", osCapU32[i]);
|
||||
if (retError == -1) {
|
||||
@@ -146,9 +146,6 @@ FREE_PRICAP_ARRAY:
|
||||
free(priCapArray);
|
||||
FREE_PRIOUTPUT:
|
||||
free(priOutput);
|
||||
FREE_OSOUTPUT:
|
||||
free(osOutput);
|
||||
temp = nullptr;
|
||||
|
||||
return allSyscapBUffer;
|
||||
}
|
||||
|
||||
+1
-1
@@ -209,7 +209,7 @@ int32_t CreatePCID(char *inputFile, char *outDirPath)
|
||||
allPriSyscapStrLen++; // for separator ','
|
||||
}
|
||||
if ((allPriSyscapStrLen + 1) > PRIVATE_SYSCAP_SIZE) {
|
||||
PRINT_ERR("context of \"pri\" array is too many\n");
|
||||
PRINT_ERR("context of \"pri\" array is too many.\n");
|
||||
ret = -1;
|
||||
goto FREE_CONVERT_OUT;
|
||||
}
|
||||
|
||||
@@ -26,9 +26,6 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
namespace Syscap {
|
||||
int osSyscap[32] = {1, 3, 3};
|
||||
char priSyscap[] = "Device.syscap1GEDR,Device.syscap2WREGW,Vendor.syscap3RGD,Vendor.syscap4RWEG,Vendor.syscap5REWGWE,";
|
||||
|
||||
class SyscapCodecTest : public testing::Test {
|
||||
public:
|
||||
static void SetUpTestCase(void);
|
||||
|
||||
@@ -34,9 +34,8 @@ void SyscapCodecTest::TearDown() {}
|
||||
*/
|
||||
HWTEST_F(SyscapCodecTest, EncodeOsSyscap, TestSize.Level1)
|
||||
{
|
||||
int *intOsInput = NULL;
|
||||
EXPECT_TRUE(EncodeOsSyscap(&intOsInput));
|
||||
free(intOsInput);
|
||||
char OsInput[128] = {0};
|
||||
EXPECT_TRUE(EncodeOsSyscap(OsInput));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -59,11 +58,12 @@ HWTEST_F(SyscapCodecTest, EncodePrivateSyscap, TestSize.Level1)
|
||||
*/
|
||||
HWTEST_F(SyscapCodecTest, DecodeOsSyscap, TestSize.Level1)
|
||||
{
|
||||
int osSyscap[32] = {1, 3, 3};
|
||||
char (*osOutput)[128] = NULL;
|
||||
int decodeOsCnt;
|
||||
char expectOsOutput001[] = "SystemCapability.Account.AppAccount";
|
||||
char expectOsOutput002[] = "SystemCapability.Account.OsAccount";
|
||||
EXPECT_TRUE(DecodeOsSyscap(osSyscap, &osOutput, &decodeOsCnt));
|
||||
EXPECT_TRUE(DecodeOsSyscap((char *)osSyscap, &osOutput, &decodeOsCnt));
|
||||
char (*tmpOsOutput)[128] = osOutput;
|
||||
EXPECT_STREQ(*tmpOsOutput, expectOsOutput001);
|
||||
EXPECT_STREQ(*(tmpOsOutput + 1), expectOsOutput002);
|
||||
@@ -79,6 +79,7 @@ HWTEST_F(SyscapCodecTest, DecodeOsSyscap, TestSize.Level1)
|
||||
HWTEST_F(SyscapCodecTest, DecodePrivateSyscap, TestSize.Level1)
|
||||
{
|
||||
char (*priOutput)[128] = NULL;
|
||||
char priSyscap[] = "Device.syscap1GEDR,Device.syscap2WREGW,Vendor.syscap3RGD,Vendor.syscap4RWEG,Vendor.syscap5REWGWE,";
|
||||
int decodePriCnt;
|
||||
char expectPriOutput001[] = "SystemCapability.Device.syscap1GEDR";
|
||||
char expectPriOutput002[] = "SystemCapability.Device.syscap2WREGW";
|
||||
|
||||
Reference in New Issue
Block a user