81 lines
2.4 KiB
C
81 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
*
|
|
* This program is free software: you can use, redistribute, and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3
|
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#define _DEFAULT_SOURCE
|
|
#include "tenv.h"
|
|
#include "tconfig.h"
|
|
|
|
static char toLowChar(char c) { return (c > 'Z' || c < 'A' ? c : (c - 'A' + 'a')); }
|
|
|
|
int32_t taosEnvNameToCfgName(const char *envNameStr, char *cfgNameStr, int32_t cfgNameMaxLen) {
|
|
if (envNameStr == NULL || cfgNameStr == NULL) return -1;
|
|
char *p = cfgNameStr;
|
|
if (envNameStr[0] != 'T' || envNameStr[1] != 'A' || envNameStr[2] != 'O' || envNameStr[3] != 'S' ||
|
|
envNameStr[4] != '_') {
|
|
// if(p != envNameStr) strncpy(p, envNameStr, cfgNameMaxLen - 1);
|
|
// p[cfgNameMaxLen - 1] = '\0';
|
|
// return strlen(cfgNameStr);
|
|
cfgNameStr[0] = '\0';
|
|
return -1;
|
|
}
|
|
envNameStr += 5;
|
|
if (*envNameStr != '\0') {
|
|
*p = toLowChar(*envNameStr);
|
|
p++;
|
|
envNameStr++;
|
|
}
|
|
|
|
for (size_t i = 1; i < cfgNameMaxLen && *envNameStr != '\0'; i++) {
|
|
if (*envNameStr == '_') {
|
|
envNameStr++;
|
|
*p = *envNameStr;
|
|
if (*envNameStr == '\0') break;
|
|
} else {
|
|
*p = toLowChar(*envNameStr);
|
|
}
|
|
p++;
|
|
envNameStr++;
|
|
}
|
|
|
|
*p = '\0';
|
|
return strlen(cfgNameStr);
|
|
}
|
|
|
|
int32_t taosEnvToCfg(const char *envStr, char *cfgStr) {
|
|
if (envStr == NULL || cfgStr == NULL) {
|
|
return -1;
|
|
}
|
|
if (cfgStr != envStr) strcpy(cfgStr, envStr);
|
|
char *p = strchr(cfgStr, '=');
|
|
|
|
if (p != NULL) {
|
|
char buf[CFG_NAME_MAX_LEN];
|
|
if (*(p + 1) == '\'') {
|
|
*(p + 1) = ' ';
|
|
char *pEnd = &cfgStr[strlen(cfgStr) - 1];
|
|
if (*pEnd == '\'') *pEnd = '\0';
|
|
}
|
|
*p = '\0';
|
|
int32_t cfgNameLen = taosEnvNameToCfgName(cfgStr, buf, CFG_NAME_MAX_LEN);
|
|
if (cfgNameLen > 0) {
|
|
memcpy(cfgStr, buf, cfgNameLen);
|
|
memset(&cfgStr[cfgNameLen], ' ', p - cfgStr - cfgNameLen + 1);
|
|
} else {
|
|
*cfgStr = '\0';
|
|
return -1;
|
|
}
|
|
}
|
|
return strlen(cfgStr);
|
|
} |