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 INIT_UTILS_H 17d9f0492fSopenharmony_ci#define INIT_UTILS_H 18d9f0492fSopenharmony_ci#include <fcntl.h> 19d9f0492fSopenharmony_ci#include <sys/stat.h> 20d9f0492fSopenharmony_ci#include <stdint.h> 21d9f0492fSopenharmony_ci#include <stdbool.h> 22d9f0492fSopenharmony_ci#include <unistd.h> 23d9f0492fSopenharmony_ci#include <time.h> 24d9f0492fSopenharmony_ci 25d9f0492fSopenharmony_ci#include "beget_ext.h" 26d9f0492fSopenharmony_ci 27d9f0492fSopenharmony_ci#ifndef STARTUP_INIT_TEST 28d9f0492fSopenharmony_ci#ifndef INIT_STATIC 29d9f0492fSopenharmony_ci#define INIT_STATIC static 30d9f0492fSopenharmony_ci#endif 31d9f0492fSopenharmony_ci#else 32d9f0492fSopenharmony_ci#ifndef INIT_STATIC 33d9f0492fSopenharmony_ci#define INIT_STATIC 34d9f0492fSopenharmony_ci#endif 35d9f0492fSopenharmony_ci#endif 36d9f0492fSopenharmony_ci 37d9f0492fSopenharmony_ci#ifdef __cplusplus 38d9f0492fSopenharmony_ci#if __cplusplus 39d9f0492fSopenharmony_ciextern "C" { 40d9f0492fSopenharmony_ci#endif 41d9f0492fSopenharmony_ci#endif 42d9f0492fSopenharmony_ci 43d9f0492fSopenharmony_citypedef struct { 44d9f0492fSopenharmony_ci char *name; 45d9f0492fSopenharmony_ci int value; 46d9f0492fSopenharmony_ci} InitArgInfo; 47d9f0492fSopenharmony_ci 48d9f0492fSopenharmony_ci#define BASE_MS_UNIT 1000 49d9f0492fSopenharmony_ci#define MAX_INT_LEN 20 50d9f0492fSopenharmony_ci#define HEX_BASE 16 51d9f0492fSopenharmony_ci#define BINARY_BASE 2 52d9f0492fSopenharmony_ci#define OCTAL_BASE 8 53d9f0492fSopenharmony_ci#define DECIMAL_BASE 10 54d9f0492fSopenharmony_ci#define WAIT_MAX_SECOND 5 55d9f0492fSopenharmony_ci#define MAX_BUFFER_LEN 256 56d9f0492fSopenharmony_ci#define CMDLINE_VALUE_LEN_MAX 512 57d9f0492fSopenharmony_ci#define STDERR_HANDLE 2 58d9f0492fSopenharmony_ci#define ARRAY_LENGTH(array) (sizeof((array)) / sizeof((array)[0])) 59d9f0492fSopenharmony_ci#define BOOT_CMD_LINE STARTUP_INIT_UT_PATH"/proc/cmdline" 60d9f0492fSopenharmony_ci 61d9f0492fSopenharmony_ciuid_t DecodeUid(const char *name); 62d9f0492fSopenharmony_cigid_t DecodeGid(const char *name); 63d9f0492fSopenharmony_cichar *ReadFileToBuf(const char *configFile); 64d9f0492fSopenharmony_ciint GetProcCmdlineValue(const char *name, const char *buffer, char *value, int length); 65d9f0492fSopenharmony_cichar *ReadFileData(const char *fileName); 66d9f0492fSopenharmony_ci 67d9f0492fSopenharmony_citypedef struct INIT_TIMING_STAT { 68d9f0492fSopenharmony_ci struct timespec startTime; 69d9f0492fSopenharmony_ci struct timespec endTime; 70d9f0492fSopenharmony_ci} INIT_TIMING_STAT; 71d9f0492fSopenharmony_ci 72d9f0492fSopenharmony_citypedef struct NameValuePair { 73d9f0492fSopenharmony_ci const char *name; 74d9f0492fSopenharmony_ci const char *nameEnd; 75d9f0492fSopenharmony_ci const char *value; 76d9f0492fSopenharmony_ci const char *valueEnd; 77d9f0492fSopenharmony_ci} NAME_VALUE_PAIR; 78d9f0492fSopenharmony_ciint IterateNameValuePairs(const char *src, void (*iterator)(const NAME_VALUE_PAIR *nv, void *context), void *context); 79d9f0492fSopenharmony_ci 80d9f0492fSopenharmony_ciint SplitString(char *srcPtr, const char *del, char **dstPtr, int maxNum); 81d9f0492fSopenharmony_cilong long InitDiffTime(INIT_TIMING_STAT *stat); 82d9f0492fSopenharmony_civoid WaitForFile(const char *source, unsigned int maxSecond); 83d9f0492fSopenharmony_cisize_t WriteAll(int fd, const char *buffer, size_t size); 84d9f0492fSopenharmony_cichar *GetRealPath(const char *source); 85d9f0492fSopenharmony_ciint StringToInt(const char *str, int defaultValue); 86d9f0492fSopenharmony_ciint StringToUint(const char *name, unsigned int *value); 87d9f0492fSopenharmony_ciint MakeDirRecursive(const char *dir, mode_t mode); 88d9f0492fSopenharmony_civoid CheckAndCreateDir(const char *fileName); 89d9f0492fSopenharmony_ciint CheckAndCreatFile(const char *file, mode_t mode); 90d9f0492fSopenharmony_ciint MakeDir(const char *dir, mode_t mode); 91d9f0492fSopenharmony_ciint ReadFileInDir(const char *dirPath, const char *includeExt, 92d9f0492fSopenharmony_ci int (*processFile)(const char *fileName, void *context), void *context); 93d9f0492fSopenharmony_cichar **SplitStringExt(char *buffer, const char *del, int *returnCount, int maxItemCount); 94d9f0492fSopenharmony_civoid FreeStringVector(char **vector, int count); 95d9f0492fSopenharmony_ciint InUpdaterMode(void); 96d9f0492fSopenharmony_ciint InRescueMode(void); 97d9f0492fSopenharmony_ciint StringReplaceChr(char *strl, char oldChr, char newChr); 98d9f0492fSopenharmony_ci 99d9f0492fSopenharmony_ciint OpenConsole(void); 100d9f0492fSopenharmony_ciint OpenKmsg(void); 101d9f0492fSopenharmony_civoid TrimTail(char *str, char c); 102d9f0492fSopenharmony_cichar *TrimHead(char *str, char c); 103d9f0492fSopenharmony_ci 104d9f0492fSopenharmony_ciINIT_LOCAL_API uint32_t IntervalTime(struct timespec *startTime, struct timespec *endTime); 105d9f0492fSopenharmony_ci 106d9f0492fSopenharmony_ciINIT_LOCAL_API int StringToULL(const char *str, unsigned long long int *out); 107d9f0492fSopenharmony_ciINIT_LOCAL_API int StringToLL(const char *str, long long int *out); 108d9f0492fSopenharmony_civoid CloseStdio(void); 109d9f0492fSopenharmony_ci 110d9f0492fSopenharmony_ciint GetServiceGroupIdByPid(pid_t pid, gid_t *gids, uint32_t gidSize); 111d9f0492fSopenharmony_ciint GetParameterFromCmdLine(const char *paramName, char *value, size_t valueLen); 112d9f0492fSopenharmony_ci 113d9f0492fSopenharmony_ci/** 114d9f0492fSopenharmony_ci * @brief Get string index from a string array 115d9f0492fSopenharmony_ci * 116d9f0492fSopenharmony_ci * @param strArray string array 117d9f0492fSopenharmony_ci * Attension: last item in the array must be NULL, for example: 118d9f0492fSopenharmony_ci * const char *strArray[] = { "val1", "val2", NULL } 119d9f0492fSopenharmony_ci * @param target string to be matched 120d9f0492fSopenharmony_ci * @param ignoreCase 0 means exact match, others mean ignore case 121d9f0492fSopenharmony_ci * @return return 0 if succeed; other values if failed. 122d9f0492fSopenharmony_ci */ 123d9f0492fSopenharmony_ciint OH_StrArrayGetIndex(const char *strArray[], const char *target, int ignoreCase); 124d9f0492fSopenharmony_ci 125d9f0492fSopenharmony_ci/** 126d9f0492fSopenharmony_ci * @brief Get string index from a string array with extended strings 127d9f0492fSopenharmony_ci * 128d9f0492fSopenharmony_ci * @param strArray string array 129d9f0492fSopenharmony_ci * Attension: last item in the array must be NULL, for example: 130d9f0492fSopenharmony_ci * const char *strArray[] = { "val1", "val2", NULL } 131d9f0492fSopenharmony_ci * @param target string to be matched 132d9f0492fSopenharmony_ci * @param ignoreCase 0 means exact match, others mean ignore case 133d9f0492fSopenharmony_ci * @param extend optional extended strings array, last string must be NULL 134d9f0492fSopenharmony_ci * @return return 0 if succeed; other values if failed. 135d9f0492fSopenharmony_ci */ 136d9f0492fSopenharmony_ciint OH_ExtendableStrArrayGetIndex(const char *strArray[], const char *target, int ignoreCase, const char *extend[]); 137d9f0492fSopenharmony_ci 138d9f0492fSopenharmony_ci/** 139d9f0492fSopenharmony_ci * @brief Get string dictionary from a string dictionary array 140d9f0492fSopenharmony_ci * 141d9f0492fSopenharmony_ci * @param strDict string dictionary array 142d9f0492fSopenharmony_ci * Attension: last item in the array must be NULL, for example: 143d9f0492fSopenharmony_ci * Each item must be a structure with "const char *" as the first element 144d9f0492fSopenharmony_ci * For example: 145d9f0492fSopenharmony_ci * typedef { 146d9f0492fSopenharmony_ci * const char *key; // First element must be "const char *" 147d9f0492fSopenharmony_ci * const char *value; // Arbitrary elements 148d9f0492fSopenharmony_ci * // Optionally add more elements 149d9f0492fSopenharmony_ci * } STRING_DICT_ST; 150d9f0492fSopenharmony_ci * @param target string to be matched 151d9f0492fSopenharmony_ci * @param ignoreCase 0 means exact match, others mean ignore case 152d9f0492fSopenharmony_ci * @return return item pointer if succeed; NULL if failed 153d9f0492fSopenharmony_ci * @example 154d9f0492fSopenharmony_ci * // Define a name-value pair as dictionary item 155d9f0492fSopenharmony_ci * typedef struct { 156d9f0492fSopenharmony_ci * const char *name; 157d9f0492fSopenharmony_ci * const char *value; 158d9f0492fSopenharmony_ci * } NAME_VALUE_ST; 159d9f0492fSopenharmony_ci 160d9f0492fSopenharmony_ci * // Fill the dictionary values 161d9f0492fSopenharmony_ci * NAME_VALUE_ST dict[] = { { "key1", "val1" }, { "key2", "val2" }}; 162d9f0492fSopenharmony_ci 163d9f0492fSopenharmony_ci * // Find by key name 164d9f0492fSopenharmony_ci * NAME_VALUE_ST *found = (NAME_VALUE_ST *)StrDictGetIndex((void **)dict, sizeof(NAME_VALUE_ST), "key1", FALSE); 165d9f0492fSopenharmony_ci */ 166d9f0492fSopenharmony_civoid *OH_StrDictGet(void **strDict, int dictSize, const char *target, int ignoreCase); 167d9f0492fSopenharmony_ci 168d9f0492fSopenharmony_ci/** 169d9f0492fSopenharmony_ci * @brief Get string dictionary from a string dictionary array and extended string dictionary 170d9f0492fSopenharmony_ci * 171d9f0492fSopenharmony_ci * @param strDict string dictionary array 172d9f0492fSopenharmony_ci * Attension: last item in the array must be NULL, for example: 173d9f0492fSopenharmony_ci * Each item must be a structure with "const char *" as the first element 174d9f0492fSopenharmony_ci * For example: 175d9f0492fSopenharmony_ci * typedef { 176d9f0492fSopenharmony_ci * const char *key; // First element must be "const char *" 177d9f0492fSopenharmony_ci * const char *value; // Arbitrary elements 178d9f0492fSopenharmony_ci * // Optionally add more elements 179d9f0492fSopenharmony_ci * } STRING_DICT_ST; 180d9f0492fSopenharmony_ci * @param target string to be matched 181d9f0492fSopenharmony_ci * @param ignoreCase 0 means exact match, others mean ignore case 182d9f0492fSopenharmony_ci * @param extendStrDict optional extended strings dictionary array, last item must be NULL 183d9f0492fSopenharmony_ci * @return return item pointer if succeed; NULL if failed. 184d9f0492fSopenharmony_ci */ 185d9f0492fSopenharmony_civoid *OH_ExtendableStrDictGet(void **strDict, int dictSize, const char *target, int ignoreCase, void **extendStrDict); 186d9f0492fSopenharmony_ci 187d9f0492fSopenharmony_cilong long GetUptimeInMicroSeconds(const struct timespec *uptime); 188d9f0492fSopenharmony_ci 189d9f0492fSopenharmony_ci#ifdef __cplusplus 190d9f0492fSopenharmony_ci#if __cplusplus 191d9f0492fSopenharmony_ci} 192d9f0492fSopenharmony_ci#endif 193d9f0492fSopenharmony_ci#endif 194d9f0492fSopenharmony_ci#endif // INIT_UTILS_H 195