16f2c2defSopenharmony_ci/* 26f2c2defSopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd. 36f2c2defSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46f2c2defSopenharmony_ci * you may not use this file except in compliance with the License. 56f2c2defSopenharmony_ci * You may obtain a copy of the License at 66f2c2defSopenharmony_ci * 76f2c2defSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86f2c2defSopenharmony_ci * 96f2c2defSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106f2c2defSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116f2c2defSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126f2c2defSopenharmony_ci * See the License for the specific language governing permissions and 136f2c2defSopenharmony_ci * limitations under the License. 146f2c2defSopenharmony_ci */ 156f2c2defSopenharmony_ci 166f2c2defSopenharmony_ci#include "hiview_config.h" 176f2c2defSopenharmony_ci#include "hiview_def.h" 186f2c2defSopenharmony_ci#include "hiview_event.h" 196f2c2defSopenharmony_ci#include "hiview_file.h" 206f2c2defSopenharmony_ci#include "hiview_log.h" 216f2c2defSopenharmony_ci#include "hiview_util.h" 226f2c2defSopenharmony_ci#include "ohos_types.h" 236f2c2defSopenharmony_ci#include "securec.h" 246f2c2defSopenharmony_ci 256f2c2defSopenharmony_cistatic uint32 GetDefineFileVersion(uint8 type) 266f2c2defSopenharmony_ci{ 276f2c2defSopenharmony_ci switch (type) { 286f2c2defSopenharmony_ci case HIVIEW_UE_EVENT_FILE: 296f2c2defSopenharmony_ci return HIVIEW_UE_EVENT_VER; 306f2c2defSopenharmony_ci case HIVIEW_STAT_EVENT_FILE: 316f2c2defSopenharmony_ci return HIVIEW_STATIC_EVENT_VER; 326f2c2defSopenharmony_ci case HIVIEW_FAULT_EVENT_FILE: 336f2c2defSopenharmony_ci return HIVIEW_FAULT_EVENT_VER; 346f2c2defSopenharmony_ci default: 356f2c2defSopenharmony_ci // non-event file 366f2c2defSopenharmony_ci return 0; 376f2c2defSopenharmony_ci } 386f2c2defSopenharmony_ci} 396f2c2defSopenharmony_ci 406f2c2defSopenharmony_ciboolean InitHiviewFile(HiviewFile *fp, HiviewFileType type, uint32 size) 416f2c2defSopenharmony_ci{ 426f2c2defSopenharmony_ci if (fp == NULL || fp->path == NULL) { 436f2c2defSopenharmony_ci return FALSE; 446f2c2defSopenharmony_ci } 456f2c2defSopenharmony_ci 466f2c2defSopenharmony_ci fp->fhandle = HIVIEW_FileOpen(fp->path); 476f2c2defSopenharmony_ci if (fp->fhandle < 0) { 486f2c2defSopenharmony_ci int32 errnoRecord = (int32)errno; 496f2c2defSopenharmony_ci uint16 hieventID = 1; 506f2c2defSopenharmony_ci HiEvent *hievent = HIEVENT_CREATE(HIEVENT_FAULT, hieventID, 2); // 2 params 516f2c2defSopenharmony_ci HIEVENT_PUT_INT_VALUE(hievent, 0, (int32)type); 526f2c2defSopenharmony_ci HIEVENT_PUT_INT_VALUE(hievent, 1, errnoRecord); 536f2c2defSopenharmony_ci HIEVENT_REPORT(hievent); 546f2c2defSopenharmony_ci return FALSE; 556f2c2defSopenharmony_ci } 566f2c2defSopenharmony_ci 576f2c2defSopenharmony_ci HiviewFileHeader *pHeader = &(fp->header); 586f2c2defSopenharmony_ci FileHeaderCommon *pCommon = &(pHeader->common); 596f2c2defSopenharmony_ci pCommon->type = (uint8)type; 606f2c2defSopenharmony_ci pHeader->size = size + sizeof(HiviewFileHeader); 616f2c2defSopenharmony_ci fp->configSize = size; 626f2c2defSopenharmony_ci // Create file for the first time 636f2c2defSopenharmony_ci if (ReadFileHeader(fp) == FALSE) { 646f2c2defSopenharmony_ci switch (pCommon->type) { 656f2c2defSopenharmony_ci case HIVIEW_LOG_TEXT_FILE: 666f2c2defSopenharmony_ci pCommon->prefix = HIVIEW_FILE_HEADER_PREFIX_TEXT; 676f2c2defSopenharmony_ci break; 686f2c2defSopenharmony_ci case HIVIEW_LOG_BIN_FILE: 696f2c2defSopenharmony_ci pCommon->prefix = HIVIEW_FILE_HEADER_PREFIX_LOG; 706f2c2defSopenharmony_ci break; 716f2c2defSopenharmony_ci case HIVIEW_FAULT_EVENT_FILE: 726f2c2defSopenharmony_ci case HIVIEW_UE_EVENT_FILE: 736f2c2defSopenharmony_ci case HIVIEW_STAT_EVENT_FILE: 746f2c2defSopenharmony_ci pCommon->prefix = HIVIEW_FILE_HEADER_PREFIX_EVENT; 756f2c2defSopenharmony_ci break; 766f2c2defSopenharmony_ci default: 776f2c2defSopenharmony_ci break; 786f2c2defSopenharmony_ci } 796f2c2defSopenharmony_ci pCommon->codeMainVersion = HIVIEW_FILE_HEADER_MAIN_VERSION; 806f2c2defSopenharmony_ci pCommon->codeSubVersion = HIVIEW_FILE_HEADER_SUB_VERSION; 816f2c2defSopenharmony_ci pCommon->defineFileVersion = GetDefineFileVersion(pCommon->type); 826f2c2defSopenharmony_ci pHeader->createTime = (uint32)(HIVIEW_GetCurrentTime() / MS_PER_SECOND); 836f2c2defSopenharmony_ci pHeader->rCursor = sizeof(HiviewFileHeader); 846f2c2defSopenharmony_ci pHeader->wCursor = sizeof(HiviewFileHeader); 856f2c2defSopenharmony_ci if (WriteFileHeader(fp) == FALSE) { 866f2c2defSopenharmony_ci return FALSE; 876f2c2defSopenharmony_ci } 886f2c2defSopenharmony_ci } else { 896f2c2defSopenharmony_ci // Version number may change after system upgrade 906f2c2defSopenharmony_ci pCommon->codeMainVersion = HIVIEW_FILE_HEADER_MAIN_VERSION; 916f2c2defSopenharmony_ci pCommon->codeSubVersion = HIVIEW_FILE_HEADER_SUB_VERSION; 926f2c2defSopenharmony_ci pCommon->defineFileVersion = GetDefineFileVersion(pCommon->type); 936f2c2defSopenharmony_ci } 946f2c2defSopenharmony_ci HILOG_INFO(HILOG_MODULE_HIVIEW, "InitHiviewFile for type %d success", (int32)type); 956f2c2defSopenharmony_ci return TRUE; 966f2c2defSopenharmony_ci} 976f2c2defSopenharmony_ci 986f2c2defSopenharmony_ciboolean WriteFileHeader(HiviewFile *fp) 996f2c2defSopenharmony_ci{ 1006f2c2defSopenharmony_ci if (fp == NULL || fp->fhandle < 0) { 1016f2c2defSopenharmony_ci return FALSE; 1026f2c2defSopenharmony_ci } 1036f2c2defSopenharmony_ci 1046f2c2defSopenharmony_ci int32 ret; 1056f2c2defSopenharmony_ci if (HIVIEW_FileSeek(fp->fhandle, 0, HIVIEW_SEEK_SET) >= 0) { 1066f2c2defSopenharmony_ci HiviewFileHeader tmpHeader = fp->header; 1076f2c2defSopenharmony_ci#if LITTLE_ENDIAN_SYSTEM 1086f2c2defSopenharmony_ci tmpHeader.common.prefix = Change32Endian(tmpHeader.common.prefix); 1096f2c2defSopenharmony_ci tmpHeader.common.defineFileVersion = Change32Endian(tmpHeader.common.defineFileVersion); 1106f2c2defSopenharmony_ci tmpHeader.createTime = Change32Endian(tmpHeader.createTime); 1116f2c2defSopenharmony_ci#endif 1126f2c2defSopenharmony_ci ret = HIVIEW_FileWrite(fp->fhandle, (uint8 *)&(tmpHeader), sizeof(HiviewFileHeader)); 1136f2c2defSopenharmony_ci if (ret == sizeof(HiviewFileHeader)) { 1146f2c2defSopenharmony_ci return TRUE; 1156f2c2defSopenharmony_ci } 1166f2c2defSopenharmony_ci } 1176f2c2defSopenharmony_ci 1186f2c2defSopenharmony_ci return FALSE; 1196f2c2defSopenharmony_ci} 1206f2c2defSopenharmony_ci 1216f2c2defSopenharmony_ciboolean ReadFileHeader(HiviewFile *fp) 1226f2c2defSopenharmony_ci{ 1236f2c2defSopenharmony_ci HiviewFileHeader h = { 0 }; 1246f2c2defSopenharmony_ci 1256f2c2defSopenharmony_ci if (fp == NULL || fp->fhandle < 0) { 1266f2c2defSopenharmony_ci return FALSE; 1276f2c2defSopenharmony_ci } 1286f2c2defSopenharmony_ci 1296f2c2defSopenharmony_ci int32 ret; 1306f2c2defSopenharmony_ci if (HIVIEW_FileSeek(fp->fhandle, 0, HIVIEW_SEEK_SET) < 0) { 1316f2c2defSopenharmony_ci return FALSE; 1326f2c2defSopenharmony_ci } 1336f2c2defSopenharmony_ci ret = HIVIEW_FileRead(fp->fhandle, (uint8 *)&h, sizeof(HiviewFileHeader)); 1346f2c2defSopenharmony_ci#if LITTLE_ENDIAN_SYSTEM 1356f2c2defSopenharmony_ci h.common.prefix = Change32Endian(h.common.prefix); 1366f2c2defSopenharmony_ci h.common.defineFileVersion = Change32Endian(h.common.defineFileVersion); 1376f2c2defSopenharmony_ci h.createTime = Change32Endian(h.createTime); 1386f2c2defSopenharmony_ci#endif 1396f2c2defSopenharmony_ci h.wCursor = HIVIEW_FileSize(fp->fhandle); 1406f2c2defSopenharmony_ci h.rCursor = sizeof(HiviewFileHeader); 1416f2c2defSopenharmony_ci if ((ret == sizeof(HiviewFileHeader)) && 1426f2c2defSopenharmony_ci ((h.common.prefix & 0xFFFFFF00) == HIVIEW_FILE_HEADER_PREFIX_MASK) && 1436f2c2defSopenharmony_ci (h.wCursor >= sizeof(HiviewFileHeader))) { 1446f2c2defSopenharmony_ci (void)memcpy_s(&(fp->header), sizeof(HiviewFileHeader), (void *)&h, sizeof(HiviewFileHeader)); 1456f2c2defSopenharmony_ci return TRUE; 1466f2c2defSopenharmony_ci } else { 1476f2c2defSopenharmony_ci return FALSE; 1486f2c2defSopenharmony_ci } 1496f2c2defSopenharmony_ci} 1506f2c2defSopenharmony_ci 1516f2c2defSopenharmony_ciint32 WriteToFile(HiviewFile *fp, const uint8 *data, uint32 len) 1526f2c2defSopenharmony_ci{ 1536f2c2defSopenharmony_ci if (fp == NULL || fp->fhandle < 0 || len == 0) { 1546f2c2defSopenharmony_ci return 0; 1556f2c2defSopenharmony_ci } 1566f2c2defSopenharmony_ci int32 wLen = 0; 1576f2c2defSopenharmony_ci HiviewFileHeader *h = &(fp->header); 1586f2c2defSopenharmony_ci // overflow 1596f2c2defSopenharmony_ci if (h->wCursor + len > h->size) { 1606f2c2defSopenharmony_ci ProcFile(fp, fp->outPath, HIVIEW_FILE_RENAME); 1616f2c2defSopenharmony_ci if (fp->pFunc != NULL) { 1626f2c2defSopenharmony_ci fp->pFunc(fp->outPath, h->common.type, HIVIEW_FILE_FULL); 1636f2c2defSopenharmony_ci } 1646f2c2defSopenharmony_ci } 1656f2c2defSopenharmony_ci if (HIVIEW_FileSeek(fp->fhandle, h->wCursor, HIVIEW_SEEK_SET) < 0) { 1666f2c2defSopenharmony_ci return 0; 1676f2c2defSopenharmony_ci } 1686f2c2defSopenharmony_ci if ((int32)len == HIVIEW_FileWrite(fp->fhandle, data, len)) { 1696f2c2defSopenharmony_ci h->wCursor += len; 1706f2c2defSopenharmony_ci wLen += len; 1716f2c2defSopenharmony_ci } 1726f2c2defSopenharmony_ci return wLen; 1736f2c2defSopenharmony_ci} 1746f2c2defSopenharmony_ci 1756f2c2defSopenharmony_ciint32 ReadFromFile(HiviewFile *fp, uint8 *data, uint32 readLen) 1766f2c2defSopenharmony_ci{ 1776f2c2defSopenharmony_ci if (fp == NULL || data == NULL || fp->fhandle < 0 || readLen == 0) { 1786f2c2defSopenharmony_ci return 0; 1796f2c2defSopenharmony_ci } 1806f2c2defSopenharmony_ci 1816f2c2defSopenharmony_ci HiviewFileHeader* h = &(fp->header); 1826f2c2defSopenharmony_ci uint32 wCursor = h->wCursor; 1836f2c2defSopenharmony_ci uint32 rCursor = h->rCursor; 1846f2c2defSopenharmony_ci if (wCursor < readLen) { 1856f2c2defSopenharmony_ci return 0; 1866f2c2defSopenharmony_ci } 1876f2c2defSopenharmony_ci int32 rLen = (readLen <= (wCursor - rCursor)) ? readLen : (wCursor - rCursor); 1886f2c2defSopenharmony_ci if (HIVIEW_FileSeek(fp->fhandle, rCursor, HIVIEW_SEEK_SET) < 0) { 1896f2c2defSopenharmony_ci return 0; 1906f2c2defSopenharmony_ci } 1916f2c2defSopenharmony_ci if ((int32)rLen == HIVIEW_FileRead(fp->fhandle, data, rLen)) { 1926f2c2defSopenharmony_ci h->rCursor += rLen; 1936f2c2defSopenharmony_ci } else { 1946f2c2defSopenharmony_ci rLen = 0; 1956f2c2defSopenharmony_ci } 1966f2c2defSopenharmony_ci return rLen; 1976f2c2defSopenharmony_ci} 1986f2c2defSopenharmony_ci 1996f2c2defSopenharmony_ciuint32 GetFileUsedSize(HiviewFile *fp) 2006f2c2defSopenharmony_ci{ 2016f2c2defSopenharmony_ci if (fp == NULL || fp->fhandle < 0) { 2026f2c2defSopenharmony_ci return 0; 2036f2c2defSopenharmony_ci } 2046f2c2defSopenharmony_ci return fp->header.wCursor; 2056f2c2defSopenharmony_ci} 2066f2c2defSopenharmony_ci 2076f2c2defSopenharmony_ciuint32 GetFileFreeSize(HiviewFile *fp) 2086f2c2defSopenharmony_ci{ 2096f2c2defSopenharmony_ci if (fp == NULL || fp->fhandle < 0) { 2106f2c2defSopenharmony_ci return 0; 2116f2c2defSopenharmony_ci } 2126f2c2defSopenharmony_ci 2136f2c2defSopenharmony_ci return (fp->header.size - fp->header.wCursor); 2146f2c2defSopenharmony_ci} 2156f2c2defSopenharmony_ci 2166f2c2defSopenharmony_ciint32 CloseHiviewFile(HiviewFile *fp) 2176f2c2defSopenharmony_ci{ 2186f2c2defSopenharmony_ci if (fp != NULL && fp->fhandle > 0) { 2196f2c2defSopenharmony_ci int32 ret = HIVIEW_FileClose(fp->fhandle); 2206f2c2defSopenharmony_ci fp->fhandle = -1; 2216f2c2defSopenharmony_ci UnRegisterFileWatcher(fp, NULL); 2226f2c2defSopenharmony_ci return ret; 2236f2c2defSopenharmony_ci } 2246f2c2defSopenharmony_ci return -1; 2256f2c2defSopenharmony_ci} 2266f2c2defSopenharmony_ci 2276f2c2defSopenharmony_ciint8 ProcFile(HiviewFile *fp, const char *dest, FileProcMode mode) 2286f2c2defSopenharmony_ci{ 2296f2c2defSopenharmony_ci if (fp == NULL || fp->fhandle < 0) { 2306f2c2defSopenharmony_ci return -1; 2316f2c2defSopenharmony_ci } 2326f2c2defSopenharmony_ci 2336f2c2defSopenharmony_ci if (HIVIEW_MutexLockOrWait(fp->mutex, OUT_PATH_WAIT_TIMEOUT) != 0) { 2346f2c2defSopenharmony_ci HIVIEW_UartPrint("Procfile failed, get lock fail"); 2356f2c2defSopenharmony_ci return -1; 2366f2c2defSopenharmony_ci } 2376f2c2defSopenharmony_ci switch (mode) { 2386f2c2defSopenharmony_ci case HIVIEW_FILE_COPY: { 2396f2c2defSopenharmony_ci HIVIEW_FileClose(fp->fhandle); 2406f2c2defSopenharmony_ci int32 ret = HIVIEW_FileCopy(fp->path, dest); 2416f2c2defSopenharmony_ci fp->fhandle = HIVIEW_FileOpen(fp->path); 2426f2c2defSopenharmony_ci if (ret != 0 || fp->fhandle < 0) { 2436f2c2defSopenharmony_ci int32 errnoRecord = (int32)errno; 2446f2c2defSopenharmony_ci HIVIEW_MutexUnlock(fp->mutex); 2456f2c2defSopenharmony_ci uint16 hieventID = 1; 2466f2c2defSopenharmony_ci HiEvent *hievent = HIEVENT_CREATE(HIEVENT_FAULT, hieventID, 2); // 2 params 2476f2c2defSopenharmony_ci HIEVENT_PUT_INT_VALUE(hievent, 0, (int32)fp->header.common.type); 2486f2c2defSopenharmony_ci HIEVENT_PUT_INT_VALUE(hievent, 1, errnoRecord); 2496f2c2defSopenharmony_ci HIEVENT_REPORT(hievent); 2506f2c2defSopenharmony_ci HIVIEW_UartPrint("Procfile failed, type : HIVIEW_FILE_COPY"); 2516f2c2defSopenharmony_ci return -1; 2526f2c2defSopenharmony_ci } 2536f2c2defSopenharmony_ci break; 2546f2c2defSopenharmony_ci } 2556f2c2defSopenharmony_ci case HIVIEW_FILE_RENAME: { 2566f2c2defSopenharmony_ci HIVIEW_FileClose(fp->fhandle); 2576f2c2defSopenharmony_ci uint8 type = fp->header.common.type; 2586f2c2defSopenharmony_ci uint32 size = fp->configSize; 2596f2c2defSopenharmony_ci int32 ret = HIVIEW_FileMove(fp->path, dest); 2606f2c2defSopenharmony_ci if (InitHiviewFile(fp, (HiviewFileType)type, size) == FALSE || ret != 0) { 2616f2c2defSopenharmony_ci HIVIEW_MutexUnlock(fp->mutex); 2626f2c2defSopenharmony_ci HIVIEW_UartPrint("Procfile failed, type : HIVIEW_FILE_RENAME"); 2636f2c2defSopenharmony_ci return -1; 2646f2c2defSopenharmony_ci } 2656f2c2defSopenharmony_ci break; 2666f2c2defSopenharmony_ci } 2676f2c2defSopenharmony_ci default: 2686f2c2defSopenharmony_ci HIVIEW_MutexUnlock(fp->mutex); 2696f2c2defSopenharmony_ci HIVIEW_UartPrint("Procfile failed, type : Unknown type"); 2706f2c2defSopenharmony_ci return -1; 2716f2c2defSopenharmony_ci } 2726f2c2defSopenharmony_ci HIVIEW_MutexUnlock(fp->mutex); 2736f2c2defSopenharmony_ci return 0; 2746f2c2defSopenharmony_ci} 2756f2c2defSopenharmony_ci 2766f2c2defSopenharmony_ciint IsValidPath(const char *path) 2776f2c2defSopenharmony_ci{ 2786f2c2defSopenharmony_ci if (strcmp(path, HIVIEW_FILE_PATH_LOG) == 0 || 2796f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_PATH_UE_EVENT) == 0 || 2806f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_PATH_FAULT_EVENT) == 0 || 2816f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_PATH_STAT_EVENT) == 0 || 2826f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_OUT_PATH_LOG) == 0 || 2836f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_OUT_PATH_UE_EVENT) == 0 || 2846f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_OUT_PATH_FAULT_EVENT) == 0 || 2856f2c2defSopenharmony_ci strcmp(path, HIVIEW_FILE_OUT_PATH_STAT_EVENT) == 0) { 2866f2c2defSopenharmony_ci return -1; 2876f2c2defSopenharmony_ci } 2886f2c2defSopenharmony_ci return 0; 2896f2c2defSopenharmony_ci} 2906f2c2defSopenharmony_ci 2916f2c2defSopenharmony_civoid RegisterFileWatcher(HiviewFile *fp, FileProc func, const char *path) 2926f2c2defSopenharmony_ci{ 2936f2c2defSopenharmony_ci if (fp == NULL || func == NULL) { 2946f2c2defSopenharmony_ci return; 2956f2c2defSopenharmony_ci } 2966f2c2defSopenharmony_ci fp->pFunc = func; 2976f2c2defSopenharmony_ci if (path == NULL || IsValidPath(path) != 0) { 2986f2c2defSopenharmony_ci return; 2996f2c2defSopenharmony_ci } 3006f2c2defSopenharmony_ci 3016f2c2defSopenharmony_ci int len = strlen(path) + 1; 3026f2c2defSopenharmony_ci char* tmp = (char*)HIVIEW_MemAlloc(MEM_POOL_HIVIEW_ID, len); 3036f2c2defSopenharmony_ci if (tmp == NULL) { 3046f2c2defSopenharmony_ci return; 3056f2c2defSopenharmony_ci } 3066f2c2defSopenharmony_ci if (strcpy_s(tmp, len, path) != EOK) { 3076f2c2defSopenharmony_ci HIVIEW_MemFree(MEM_POOL_HIVIEW_ID, tmp); 3086f2c2defSopenharmony_ci return; 3096f2c2defSopenharmony_ci } 3106f2c2defSopenharmony_ci fp->outPath = tmp; 3116f2c2defSopenharmony_ci} 3126f2c2defSopenharmony_ci 3136f2c2defSopenharmony_civoid UnRegisterFileWatcher(HiviewFile *fp, FileProc func) 3146f2c2defSopenharmony_ci{ 3156f2c2defSopenharmony_ci (void)func; 3166f2c2defSopenharmony_ci fp->pFunc = NULL; 3176f2c2defSopenharmony_ci if (IsValidPath(fp->outPath) == 0) { 3186f2c2defSopenharmony_ci HIVIEW_MemFree(MEM_POOL_HIVIEW_ID, fp->outPath); 3196f2c2defSopenharmony_ci } 3206f2c2defSopenharmony_ci switch (fp->header.common.type) { 3216f2c2defSopenharmony_ci case HIVIEW_FAULT_EVENT_FILE: 3226f2c2defSopenharmony_ci fp->outPath = HIVIEW_FILE_OUT_PATH_FAULT_EVENT; 3236f2c2defSopenharmony_ci break; 3246f2c2defSopenharmony_ci case HIVIEW_UE_EVENT_FILE: 3256f2c2defSopenharmony_ci fp->outPath = HIVIEW_FILE_OUT_PATH_UE_EVENT; 3266f2c2defSopenharmony_ci break; 3276f2c2defSopenharmony_ci case HIVIEW_STAT_EVENT_FILE: 3286f2c2defSopenharmony_ci fp->outPath = HIVIEW_FILE_OUT_PATH_STAT_EVENT; 3296f2c2defSopenharmony_ci break; 3306f2c2defSopenharmony_ci case HIVIEW_LOG_TEXT_FILE: 3316f2c2defSopenharmony_ci case HIVIEW_LOG_BIN_FILE: 3326f2c2defSopenharmony_ci fp->outPath = HIVIEW_FILE_OUT_PATH_LOG; 3336f2c2defSopenharmony_ci break; 3346f2c2defSopenharmony_ci default: 3356f2c2defSopenharmony_ci break; 3366f2c2defSopenharmony_ci } 3376f2c2defSopenharmony_ci} 338