1 /*
2  * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3  * Licensed under the Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  *     http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8  * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9  * PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  */
12 #include <stdbool.h>
13 #include <hilog/log_c.h>
14 #include <securec.h>
15 #include "tee_log.h"
16 #include "tlogcat.h"
17 #include "proc_tag.h"
18 
19 #ifdef LOG_TAG
20 #undef LOG_TAG
21 #endif
22 #define LOG_TAG "tlogcat"
23 
24 #ifdef LOG_DOMAIN
25 #undef LOG_DOMAIN
26 #endif
27 #define LOG_DOMAIN 0xD002F00
28 
29 static char g_logItemBuffer[LOG_ITEM_MAX_LEN];
30 
OpenTeeLog(void)31 void OpenTeeLog(void)
32 {
33 }
34 
CloseTeeLog(void)35 void CloseTeeLog(void)
36 {
37 }
38 
TeeHilogPrint(const struct LogItem * logItem,const char * logItemBuffer,bool isTa)39 static void TeeHilogPrint(const struct LogItem *logItem, const char *logItemBuffer, bool isTa)
40 {
41     uint8_t logLevel = logItem->logLevel;
42     uint32_t hiLogLevel[TOTAL_LEVEL_NUMS] = {LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_DEBUG};
43     const char *logTag = LOG_TEEOS_TAG;
44 
45     JudgeLogTag(logItem, isTa, &logTag);
46 
47     if (logLevel < TOTAL_LEVEL_NUMS) {
48         logLevel = hiLogLevel[logLevel];
49     } else {
50         logLevel = LOG_INFO;
51     }
52 
53     (void)HiLogPrint(LOG_CORE, logLevel, LOG_DOMAIN, logTag, "index: %{public}u: %{public}s",
54         logItem->serialNo, logItemBuffer);
55 }
56 
LogWriteSysLog(const struct LogItem * logItem,bool isTa)57 void LogWriteSysLog(const struct LogItem *logItem, bool isTa)
58 {
59     if (logItem == NULL || logItem->logRealLen <= 0) {
60         return;
61     }
62     if (memcpy_s(g_logItemBuffer, LOG_ITEM_MAX_LEN, logItem->logBuffer, logItem->logRealLen) == EOK) {
63         g_logItemBuffer[logItem->logRealLen - 1] = '\0';
64         TeeHilogPrint(logItem, (const char*)g_logItemBuffer, isTa);
65     }
66 }