1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci 16d9f0492fSopenharmony_ci#ifndef BASE_STARTUP_PARAM_UTILS_H 17d9f0492fSopenharmony_ci#define BASE_STARTUP_PARAM_UTILS_H 18d9f0492fSopenharmony_ci#include <stddef.h> 19d9f0492fSopenharmony_ci#include <stdint.h> 20d9f0492fSopenharmony_ci 21d9f0492fSopenharmony_ci#include "beget_ext.h" 22d9f0492fSopenharmony_ci#include "init_param.h" 23d9f0492fSopenharmony_ci#include "init_utils.h" 24d9f0492fSopenharmony_ci 25d9f0492fSopenharmony_ci#ifdef __cplusplus 26d9f0492fSopenharmony_ci#if __cplusplus 27d9f0492fSopenharmony_ciextern "C" { 28d9f0492fSopenharmony_ci#endif 29d9f0492fSopenharmony_ci#endif 30d9f0492fSopenharmony_ci 31d9f0492fSopenharmony_citypedef enum { 32d9f0492fSopenharmony_ci PARAM_CODE_NOT_INIT = PARAM_CODE_MAX + 1, 33d9f0492fSopenharmony_ci PARAM_CODE_ERROR_MAP_FILE, 34d9f0492fSopenharmony_ci} PARAM_INNER_CODE; 35d9f0492fSopenharmony_ci 36d9f0492fSopenharmony_ci#ifndef PARAM_BUFFER_MAX 37d9f0492fSopenharmony_ci#define PARAM_BUFFER_MAX (0x01 << 16) 38d9f0492fSopenharmony_ci#endif 39d9f0492fSopenharmony_ci 40d9f0492fSopenharmony_ci#define FILENAME_LEN_MAX 255 41d9f0492fSopenharmony_ci#define MS_UNIT 1000 42d9f0492fSopenharmony_ci#ifndef UNUSED 43d9f0492fSopenharmony_ci#define UNUSED(x) (void)(x) 44d9f0492fSopenharmony_ci#endif 45d9f0492fSopenharmony_ci#define PARAM_ALIGN(len) (((len) + 0x03) & (~0x03)) 46d9f0492fSopenharmony_ci#define PARAM_IS_ALIGNED(x) (((x) & 0x03) == 0) 47d9f0492fSopenharmony_ci#define PARAM_ENTRY(ptr, type, member) (type *)((char *)(ptr)-offsetof(type, member)) 48d9f0492fSopenharmony_ci 49d9f0492fSopenharmony_ci#define IS_READY_ONLY(name) \ 50d9f0492fSopenharmony_ci ((strncmp((name), "const.", strlen("const.")) == 0) || \ 51d9f0492fSopenharmony_ci (strncmp((name), "ro.", strlen("ro.")) == 0) || \ 52d9f0492fSopenharmony_ci (strncmp((name), "ohos.boot.", strlen("ohos.boot.")) == 0)) 53d9f0492fSopenharmony_ci 54d9f0492fSopenharmony_ci#define PARAM_PERSIST_PREFIX "persist." 55d9f0492fSopenharmony_ci 56d9f0492fSopenharmony_ci#define SYS_POWER_CTRL "ohos.startup.powerctrl=" 57d9f0492fSopenharmony_ci#define OHOS_CTRL_START "ohos.ctl.start=" 58d9f0492fSopenharmony_ci#define OHOS_CTRL_STOP "ohos.ctl.stop=" 59d9f0492fSopenharmony_ci#define OHOS_SERVICE_CTRL_PREFIX "ohos.servicectrl." 60d9f0492fSopenharmony_ci 61d9f0492fSopenharmony_ci#ifdef STARTUP_INIT_TEST 62d9f0492fSopenharmony_ci#define PARAM_STATIC 63d9f0492fSopenharmony_ci#else 64d9f0492fSopenharmony_ci#define PARAM_STATIC static 65d9f0492fSopenharmony_ci#endif 66d9f0492fSopenharmony_ci 67d9f0492fSopenharmony_ci#ifdef __LITEOS_M__ 68d9f0492fSopenharmony_ci#ifndef DATA_PATH 69d9f0492fSopenharmony_ci#define DATA_PATH "/" 70d9f0492fSopenharmony_ci#endif 71d9f0492fSopenharmony_ci#elif defined __LITEOS_A__ 72d9f0492fSopenharmony_ci#define DATA_PATH STARTUP_INIT_UT_PATH"/storage/data/system/param/" 73d9f0492fSopenharmony_ci#elif defined __LINUX__ 74d9f0492fSopenharmony_ci#define DATA_PATH STARTUP_INIT_UT_PATH"/storage/data/system/param/" 75d9f0492fSopenharmony_ci#else 76d9f0492fSopenharmony_ci#define DATA_PATH STARTUP_INIT_UT_PATH"/data/service/el1/startup/parameters/" 77d9f0492fSopenharmony_ci#endif 78d9f0492fSopenharmony_ci#define PARAM_AREA_SIZE_CFG STARTUP_INIT_UT_PATH"/etc/param/ohos.para.size" 79d9f0492fSopenharmony_ci#define CLIENT_PIPE_NAME "/dev/unix/socket/paramservice" 80d9f0492fSopenharmony_ci#define PIPE_NAME STARTUP_INIT_UT_PATH "/dev/unix/socket/paramservice" 81d9f0492fSopenharmony_ci#define PARAM_STORAGE_PATH STARTUP_INIT_UT_PATH "/dev/__parameters__" 82d9f0492fSopenharmony_ci#define PARAM_PERSIST_SAVE_PATH DATA_PATH "persist_parameters" 83d9f0492fSopenharmony_ci#define PARAM_PERSIST_SAVE_TMP_PATH DATA_PATH "tmp_persist_parameters" 84d9f0492fSopenharmony_ci#define PRIVATE_DATA_PATH STARTUP_INIT_UT_PATH "/data/service/el1/public/startup/parameters/" 85d9f0492fSopenharmony_ci#define PARAM_OLD_PERSIST_SAVE_PATH PRIVATE_DATA_PATH "persist_parameters" 86d9f0492fSopenharmony_ci#define PARAM_PUBLIC_PERSIST_SAVE_PATH DATA_PATH "public_persist_parameters" 87d9f0492fSopenharmony_ci#define PARAM_PUBLIC_PERSIST_SAVE_TMP_PATH DATA_PATH "tmp_public_persist_parameters" 88d9f0492fSopenharmony_ci#define PARAM_PRIVATE_PERSIST_SAVE_PATH PRIVATE_DATA_PATH "private_persist_parameters" 89d9f0492fSopenharmony_ci#define PARAM_PRIVATE_PERSIST_SAVE_TMP_PATH PRIVATE_DATA_PATH "tmp_private_persist_parameters" 90d9f0492fSopenharmony_ci#define PERSIST_HANDLE_MAX 2 91d9f0492fSopenharmony_ci 92d9f0492fSopenharmony_ci#define WORKSPACE_FLAGS_INIT 0x01 93d9f0492fSopenharmony_ci#define WORKSPACE_FLAGS_LOADED 0x02 94d9f0492fSopenharmony_ci#define WORKSPACE_FLAGS_UPDATE 0x04 95d9f0492fSopenharmony_ci#define WORKSPACE_FLAGS_LABEL_LOADED 0x08 96d9f0492fSopenharmony_ci#define WORKSPACE_FLAGS_NEED_ACCESS 0x10 97d9f0492fSopenharmony_ci#define WORKSPACE_FLAGS_FOR_INIT 0x20 98d9f0492fSopenharmony_ci 99d9f0492fSopenharmony_ci#define PARAM_SET_FLAG(node, flag) ((node) |= (flag)) 100d9f0492fSopenharmony_ci#define PARAM_CLEAR_FLAG(node, flag) ((node) &= ~(flag)) 101d9f0492fSopenharmony_ci#define PARAM_TEST_FLAG(node, flag) (((node) & (flag)) == (flag)) 102d9f0492fSopenharmony_ci 103d9f0492fSopenharmony_ci#ifndef PARAN_DOMAIN 104d9f0492fSopenharmony_ci#define PARAN_DOMAIN (BASE_DOMAIN + 2) 105d9f0492fSopenharmony_ci#endif 106d9f0492fSopenharmony_ci#define PARAN_LABEL "PARAM" 107d9f0492fSopenharmony_ci#ifdef PARAM_BASE 108d9f0492fSopenharmony_ciINIT_LOCAL_API void ParamWorBaseLog(InitLogLevel logLevel, uint32_t domain, const char *tag, const char *fmt, ...); 109d9f0492fSopenharmony_ci#define PARAM_LOGV(fmt, ...) \ 110d9f0492fSopenharmony_ci ParamWorBaseLog(INIT_DEBUG, PARAN_DOMAIN, PARAN_LABEL, "[%s:%d]" fmt, \ 111d9f0492fSopenharmony_ci (STARTUP_FILE_NAME), (__LINE__), ##__VA_ARGS__) 112d9f0492fSopenharmony_ci#define PARAM_LOGI(fmt, ...) \ 113d9f0492fSopenharmony_ci ParamWorBaseLog(INIT_INFO, PARAN_DOMAIN, PARAN_LABEL, "[%s:%d]" fmt, \ 114d9f0492fSopenharmony_ci (STARTUP_FILE_NAME), (__LINE__), ##__VA_ARGS__) 115d9f0492fSopenharmony_ci#define PARAM_LOGW(fmt, ...) \ 116d9f0492fSopenharmony_ci ParamWorBaseLog(INIT_WARN, PARAN_DOMAIN, PARAN_LABEL, "[%s:%d]" fmt, \ 117d9f0492fSopenharmony_ci (STARTUP_FILE_NAME), (__LINE__), ##__VA_ARGS__) 118d9f0492fSopenharmony_ci#define PARAM_LOGE(fmt, ...) \ 119d9f0492fSopenharmony_ci ParamWorBaseLog(INIT_ERROR, PARAN_DOMAIN, PARAN_LABEL, "[%s:%d]" fmt, \ 120d9f0492fSopenharmony_ci (STARTUP_FILE_NAME), (__LINE__), ##__VA_ARGS__) 121d9f0492fSopenharmony_ci#else 122d9f0492fSopenharmony_ci#define PARAM_LOGI(fmt, ...) STARTUP_LOGI(PARAN_DOMAIN, PARAN_LABEL, fmt, ##__VA_ARGS__) 123d9f0492fSopenharmony_ci#define PARAM_LOGE(fmt, ...) STARTUP_LOGE(PARAN_DOMAIN, PARAN_LABEL, fmt, ##__VA_ARGS__) 124d9f0492fSopenharmony_ci#define PARAM_LOGV(fmt, ...) STARTUP_LOGV(PARAN_DOMAIN, PARAN_LABEL, fmt, ##__VA_ARGS__) 125d9f0492fSopenharmony_ci#define PARAM_LOGW(fmt, ...) STARTUP_LOGW(PARAN_DOMAIN, PARAN_LABEL, fmt, ##__VA_ARGS__) 126d9f0492fSopenharmony_ci#endif 127d9f0492fSopenharmony_ci 128d9f0492fSopenharmony_ci#define PARAM_CHECK(retCode, exper, ...) \ 129d9f0492fSopenharmony_ci if (!(retCode)) { \ 130d9f0492fSopenharmony_ci PARAM_LOGE(__VA_ARGS__); \ 131d9f0492fSopenharmony_ci exper; \ 132d9f0492fSopenharmony_ci } 133d9f0492fSopenharmony_ci 134d9f0492fSopenharmony_ci#define PARAM_INFO_CHECK(retCode, exper, ...) \ 135d9f0492fSopenharmony_ci if (!(retCode)) { \ 136d9f0492fSopenharmony_ci PARAM_LOGI(__VA_ARGS__); \ 137d9f0492fSopenharmony_ci exper; \ 138d9f0492fSopenharmony_ci } 139d9f0492fSopenharmony_ci 140d9f0492fSopenharmony_ci#define PARAM_WARNING_CHECK(retCode, exper, ...) \ 141d9f0492fSopenharmony_ci if (!(retCode)) { \ 142d9f0492fSopenharmony_ci PARAM_LOGW(__VA_ARGS__); \ 143d9f0492fSopenharmony_ci exper; \ 144d9f0492fSopenharmony_ci } 145d9f0492fSopenharmony_ci 146d9f0492fSopenharmony_ci#define PARAM_ONLY_CHECK(retCode, exper) \ 147d9f0492fSopenharmony_ci if (!(retCode)) { \ 148d9f0492fSopenharmony_ci exper; \ 149d9f0492fSopenharmony_ci } 150d9f0492fSopenharmony_ci 151d9f0492fSopenharmony_citypedef int (*DUMP_PRINTF)(const char *fmt, ...); 152d9f0492fSopenharmony_ci#define PARAM_DUMP g_printf 153d9f0492fSopenharmony_ci#define MAX_LABEL_LEN 256 154d9f0492fSopenharmony_ci#define PARAM_BUFFER_SIZE 256 155d9f0492fSopenharmony_ci 156d9f0492fSopenharmony_ci#define SUBSTR_INFO_NAME 0 157d9f0492fSopenharmony_ci#define SUBSTR_INFO_VALUE 1 158d9f0492fSopenharmony_ci#ifdef PARAM_SUPPORT_SELINUX 159d9f0492fSopenharmony_ci#define SUBSTR_INFO_LABEL 1 160d9f0492fSopenharmony_ci#define SUBSTR_INFO_DAC 2 161d9f0492fSopenharmony_ci#else 162d9f0492fSopenharmony_ci#define SUBSTR_INFO_LABEL 1 163d9f0492fSopenharmony_ci#define SUBSTR_INFO_DAC 1 164d9f0492fSopenharmony_ci#endif 165d9f0492fSopenharmony_ci 166d9f0492fSopenharmony_ciINIT_LOCAL_API int SplitParamString(char *line, const char *exclude[], uint32_t count, 167d9f0492fSopenharmony_ci int (*result)(const uint32_t *context, const char *name, const char *value), const uint32_t *context); 168d9f0492fSopenharmony_ci 169d9f0492fSopenharmony_ci#ifdef __cplusplus 170d9f0492fSopenharmony_ci#if __cplusplus 171d9f0492fSopenharmony_ci} 172d9f0492fSopenharmony_ci#endif 173d9f0492fSopenharmony_ci#endif 174d9f0492fSopenharmony_ci#endif