提交 8279dffc 编写于 作者: C changcheng-weng 提交者: Gitee

share library support

上级 ba65620e
......@@ -23,7 +23,6 @@ extern "C" {
typedef struct {
char* bundleName;
char* sharedLibPaths;
char* identityID;
int uID;
int gID;
......
......@@ -30,8 +30,6 @@ extern "C" {
static const size_t MAX_BUNDLE_NAME_LEN = 127;
static const size_t MIN_BUNDLE_NAME_LEN = 7;
static const size_t MAX_SHARED_LIB_PATH_LEN = 2048;
static const size_t MIN_SHARED_LIB_PATH_LEN = 0;
static const size_t MAX_IDENTITY_ID_LEN = 24;
static const size_t MIN_IDENTITY_ID_LEN = 1;
......@@ -43,11 +41,6 @@ void FreeMessageSt(MessageSt* targetSt)
targetSt->bundleName = NULL;
}
if (targetSt->sharedLibPaths != NULL) {
free(targetSt->sharedLibPaths);
targetSt->sharedLibPaths = NULL;
}
if (targetSt->identityID != NULL) {
free(targetSt->identityID);
targetSt->identityID = NULL;
......@@ -117,14 +110,6 @@ int SplitMessage(const char* msg, unsigned int msgLen, MessageSt* msgSt)
return ret;
}
cJSON* libPathsItem = cJSON_GetObjectItem(rootJ, "sharedLibPaths");
ret = ReadStringItem(libPathsItem, &(msgSt->sharedLibPaths), MAX_SHARED_LIB_PATH_LEN, MIN_SHARED_LIB_PATH_LEN);
if (ret != EC_SUCCESS) {
FreeMessageSt(msgSt);
cJSON_Delete(rootJ);
return ret;
}
cJSON* identityIDItem = cJSON_GetObjectItem(rootJ, "identityID");
ret = ReadStringItem(identityIDItem, &(msgSt->identityID), MAX_IDENTITY_ID_LEN, MIN_IDENTITY_ID_LEN);
if (ret != EC_SUCCESS) {
......
......@@ -88,41 +88,11 @@ static int SetPerms(uid_t uID, gid_t gID)
return 0;
}
static char* GetEnvStrs(const MessageSt* msgSt)
{
size_t totalLen = strlen(ENV_TITLE) + strlen(msgSt->sharedLibPaths);
char* envStr = (char*)malloc(totalLen + 1);
if (envStr == NULL) {
HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] malloc for env failed! len %{public}u.", totalLen);
return NULL;
}
if (memset_s(envStr, totalLen + 1, '\0', totalLen + 1) != EOK) {
HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] memset_s for env failed.");
free(envStr);
return NULL;
}
if (sprintf_s(envStr, totalLen + 1, "%s%s", ENV_TITLE, msgSt->sharedLibPaths) <= 0) {
HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] sprintf_s for env failed. libPath %{public}s",\
msgSt->sharedLibPaths);
free(envStr);
return NULL;
}
return envStr;
}
pid_t CreateProcess(const MessageSt* msgSt)
{
char* envStr = GetEnvStrs(msgSt);
if (envStr == NULL) {
return -1;
}
pid_t newPID = fork();
if (newPID < 0) {
HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] create process, fork failed! err %{public}d.", errno);
free(envStr);
return -1;
}
......@@ -144,7 +114,6 @@ pid_t CreateProcess(const MessageSt* msgSt)
exit(0x7f); // 0x7f: user specified
}
free(envStr);
return newPID;
}
......
......@@ -119,8 +119,8 @@ static int Invoke(IServerProxy* iProxy, int funcId, void* origin, IpcIo* req, Ip
return EC_FAILURE;
}
HILOG_INFO(HILOG_MODULE_HIVIEW, "[appspawn] msg<%{public}s,%{public}s,%{public}s,%{public}d,%{public}d>",\
msgSt.bundleName, msgSt.sharedLibPaths, msgSt.identityID, msgSt.uID, msgSt.gID);
HILOG_INFO(HILOG_MODULE_HIVIEW, "[appspawn] msg<%{public}s,%{public}s,%{public}d,%{public}d>",\
msgSt.bundleName, msgSt.identityID, msgSt.uID, msgSt.gID);
pid_t newPid = CreateProcess(&msgSt);
FreeMessageSt(&msgSt);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册