mirror of
https://github.com/neovim/neovim.git
synced 2025-09-13 23:08:16 +00:00
option: Prepare for all environment variables being NULL.
This commit is contained in:
@@ -310,22 +310,27 @@ static void set_runtimepath_default(void)
|
|||||||
char *const vimruntime = vim_getenv("VIMRUNTIME");
|
char *const vimruntime = vim_getenv("VIMRUNTIME");
|
||||||
char *const data_dirs = vim_getenv("XDG_DATA_DIRS");
|
char *const data_dirs = vim_getenv("XDG_DATA_DIRS");
|
||||||
char *const config_dirs = vim_getenv("XDG_CONFIG_DIRS");
|
char *const config_dirs = vim_getenv("XDG_CONFIG_DIRS");
|
||||||
assert(data_home != NULL);
|
|
||||||
assert(config_home != NULL);
|
|
||||||
assert(vimruntime != NULL);
|
|
||||||
assert(data_dirs != NULL);
|
|
||||||
assert(config_dirs != NULL);
|
|
||||||
#define NVIM_SIZE (sizeof("/nvim") - 1)
|
#define NVIM_SIZE (sizeof("/nvim") - 1)
|
||||||
#define SITE_SIZE (sizeof("/site") - 1)
|
#define SITE_SIZE (sizeof("/site") - 1)
|
||||||
#define AFTER_SIZE (sizeof("/after") - 1)
|
#define AFTER_SIZE (sizeof("/after") - 1)
|
||||||
const size_t data_len = strlen(data_home);
|
size_t data_len;
|
||||||
const size_t config_len = strlen(config_home);
|
size_t config_len;
|
||||||
const size_t vimruntime_len = strlen(vimruntime);
|
size_t vimruntime_len;
|
||||||
|
if (data_home != NULL) {
|
||||||
|
data_len = strlen(data_home);
|
||||||
rtp_size += ((data_len + NVIM_SIZE + SITE_SIZE) * 2 + AFTER_SIZE) + 2;
|
rtp_size += ((data_len + NVIM_SIZE + SITE_SIZE) * 2 + AFTER_SIZE) + 2;
|
||||||
|
}
|
||||||
|
if (config_home != NULL) {
|
||||||
|
config_len = strlen(config_home);
|
||||||
rtp_size += ((config_len + NVIM_SIZE) * 2 + AFTER_SIZE) + 2;
|
rtp_size += ((config_len + NVIM_SIZE) * 2 + AFTER_SIZE) + 2;
|
||||||
rtp_size += vimruntime_len;
|
}
|
||||||
|
if (vimruntime != NULL) {
|
||||||
|
vimruntime_len = strlen(vimruntime);
|
||||||
|
rtp_size += vimruntime_len + 1;
|
||||||
|
}
|
||||||
#define COMPUTE_COLON_LEN(rtp_size, additional_size, val) \
|
#define COMPUTE_COLON_LEN(rtp_size, additional_size, val) \
|
||||||
do { \
|
do { \
|
||||||
|
if (val != NULL) { \
|
||||||
const void *iter = NULL; \
|
const void *iter = NULL; \
|
||||||
do { \
|
do { \
|
||||||
size_t dir_len; \
|
size_t dir_len; \
|
||||||
@@ -336,10 +341,16 @@ static void set_runtimepath_default(void)
|
|||||||
+ AFTER_SIZE) + 2; \
|
+ AFTER_SIZE) + 2; \
|
||||||
} \
|
} \
|
||||||
} while (iter != NULL); \
|
} while (iter != NULL); \
|
||||||
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
COMPUTE_COLON_LEN(rtp_size, SITE_SIZE, data_dirs);
|
COMPUTE_COLON_LEN(rtp_size, SITE_SIZE, data_dirs);
|
||||||
COMPUTE_COLON_LEN(rtp_size, 0, config_dirs);
|
COMPUTE_COLON_LEN(rtp_size, 0, config_dirs);
|
||||||
#undef COMPUTE_COLON_LEN
|
#undef COMPUTE_COLON_LEN
|
||||||
|
if (rtp_size == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// All additions were including comma.
|
||||||
|
rtp_size--;
|
||||||
char *const rtp = xmallocz(rtp_size);
|
char *const rtp = xmallocz(rtp_size);
|
||||||
char *rtp_cur = rtp;
|
char *rtp_cur = rtp;
|
||||||
#define ADD_STRING(tgt, src, len) \
|
#define ADD_STRING(tgt, src, len) \
|
||||||
@@ -348,6 +359,7 @@ static void set_runtimepath_default(void)
|
|||||||
ADD_STRING(tgt, str, sizeof(str) - 1)
|
ADD_STRING(tgt, str, sizeof(str) - 1)
|
||||||
#define ADD_COLON_DIRS(tgt, val, suffix, revsuffix) \
|
#define ADD_COLON_DIRS(tgt, val, suffix, revsuffix) \
|
||||||
do { \
|
do { \
|
||||||
|
if (val != NULL) { \
|
||||||
const void *iter = NULL; \
|
const void *iter = NULL; \
|
||||||
do { \
|
do { \
|
||||||
size_t dir_len; \
|
size_t dir_len; \
|
||||||
@@ -358,21 +370,35 @@ static void set_runtimepath_default(void)
|
|||||||
ADD_STATIC_STRING(rtp_cur, "/nvim" suffix ","); \
|
ADD_STATIC_STRING(rtp_cur, "/nvim" suffix ","); \
|
||||||
} \
|
} \
|
||||||
} while (iter != NULL); \
|
} while (iter != NULL); \
|
||||||
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
if (config_home != NULL) {
|
||||||
ADD_STRING(rtp_cur, config_home, config_len);
|
ADD_STRING(rtp_cur, config_home, config_len);
|
||||||
ADD_STATIC_STRING(rtp_cur, "/nvim,");
|
ADD_STATIC_STRING(rtp_cur, "/nvim,");
|
||||||
|
}
|
||||||
ADD_COLON_DIRS(rtp_cur, config_dirs, "", );
|
ADD_COLON_DIRS(rtp_cur, config_dirs, "", );
|
||||||
|
if (data_home != NULL) {
|
||||||
ADD_STRING(rtp_cur, data_home, data_len);
|
ADD_STRING(rtp_cur, data_home, data_len);
|
||||||
ADD_STATIC_STRING(rtp_cur, "/nvim/site,");
|
ADD_STATIC_STRING(rtp_cur, "/nvim/site,");
|
||||||
|
}
|
||||||
ADD_COLON_DIRS(rtp_cur, data_dirs, "/site", );
|
ADD_COLON_DIRS(rtp_cur, data_dirs, "/site", );
|
||||||
|
if (vimruntime != NULL) {
|
||||||
ADD_STRING(rtp_cur, vimruntime, vimruntime_len);
|
ADD_STRING(rtp_cur, vimruntime, vimruntime_len);
|
||||||
*rtp_cur++ = ',';
|
*rtp_cur++ = ',';
|
||||||
|
}
|
||||||
ADD_COLON_DIRS(rtp_cur, data_dirs, "/site/after", _rev);
|
ADD_COLON_DIRS(rtp_cur, data_dirs, "/site/after", _rev);
|
||||||
|
if (data_home != NULL) {
|
||||||
ADD_STRING(rtp_cur, data_home, data_len);
|
ADD_STRING(rtp_cur, data_home, data_len);
|
||||||
ADD_STATIC_STRING(rtp_cur, "/nvim/site/after,");
|
ADD_STATIC_STRING(rtp_cur, "/nvim/site/after,");
|
||||||
|
}
|
||||||
ADD_COLON_DIRS(rtp_cur, config_dirs, "/after", _rev);
|
ADD_COLON_DIRS(rtp_cur, config_dirs, "/after", _rev);
|
||||||
|
if (config_home != NULL) {
|
||||||
ADD_STRING(rtp_cur, config_home, config_len);
|
ADD_STRING(rtp_cur, config_home, config_len);
|
||||||
ADD_STATIC_STRING(rtp_cur, "/nvim/after");
|
ADD_STATIC_STRING(rtp_cur, "/nvim/after");
|
||||||
|
} else {
|
||||||
|
// Strip trailing comma.
|
||||||
|
rtp[rtp_size - 1] = NUL;
|
||||||
|
}
|
||||||
#undef ADD_COLON_DIRS
|
#undef ADD_COLON_DIRS
|
||||||
#undef ADD_STATIC_STRING
|
#undef ADD_STATIC_STRING
|
||||||
#undef ADD_STRING
|
#undef ADD_STRING
|
||||||
|
Reference in New Issue
Block a user