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