add function sf_load_data_path_config_ex

fstore_storage_engine
YuQing 2022-12-21 15:45:03 +08:00
parent f3afc0af6e
commit 3ccec6eb36
2 changed files with 64 additions and 0 deletions

View File

@ -619,3 +619,61 @@ void sf_log_config_ex(const char *other_config)
(other_config != NULL) ? other_config : ""
);
}
int sf_load_data_path_config_ex(IniFullContext *ini_ctx,
const char *item_name, const char *default_value, string_t *path)
{
const char *data_path;
data_path = iniGetStrValue(ini_ctx->section_name,
item_name, ini_ctx->context);
if (data_path == NULL) {
data_path = default_value;
} else if (*data_path == '\0') {
logError("file: "__FILE__", line: %d, "
"config file: %s%s%s, empty %s! "
"please set %s correctly.", __LINE__,
ini_ctx->filename, ini_ctx->section_name != NULL ?
", section: " : "", ini_ctx->section_name != NULL ?
ini_ctx->section_name : "", item_name, item_name);
return EINVAL;
}
if (*data_path == '/') {
path->len = strlen(data_path);
path->str = fc_strdup1(data_path, path->len);
if (path->str == NULL) {
return ENOMEM;
}
} else {
path->len = strlen(SF_G_BASE_PATH_STR) + strlen(data_path) + 1;
path->str = (char *)fc_malloc(path->len + 1);
if (path->str == NULL) {
return ENOMEM;
}
path->len = sprintf(path->str, "%s/%s",
SF_G_BASE_PATH_STR, data_path);
}
chopPath(path->str);
path->len = strlen(path->str);
if (access(path->str, F_OK) != 0) {
if (errno != ENOENT) {
logError("file: "__FILE__", line: %d, "
"access %s fail, errno: %d, error info: %s",
__LINE__, path->str, errno, STRERROR(errno));
return errno != 0 ? errno : EPERM;
}
if (mkdir(path->str, 0775) != 0) {
logError("file: "__FILE__", line: %d, "
"mkdir %s fail, errno: %d, error info: %s",
__LINE__, path->str, errno, STRERROR(errno));
return errno != 0 ? errno : EPERM;
}
SF_CHOWN_TO_RUNBY_RETURN_ON_ERROR(path->str);
}
return 0;
}

View File

@ -258,6 +258,12 @@ void sf_log_config_ex(const char *other_config);
int sf_get_base_path_from_conf_file(const char *config_filename);
int sf_load_global_base_path(IniFullContext *ini_ctx);
int sf_load_data_path_config_ex(IniFullContext *ini_ctx,
const char *item_name, const char *default_value, string_t *path);
#define sf_load_data_path_config(ini_ctx, path) \
sf_load_data_path_config_ex(ini_ctx, "data_path", "data", path)
static inline void sf_set_global_base_path(const char *base_path)
{
string_t path_string;