aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/option.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/option.c')
-rw-r--r--src/nvim/option.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c
index a449deb014..54c934ef7c 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -346,7 +346,7 @@ static inline size_t compute_double_colon_len(const char *const val,
const size_t single_suf_len)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
- if (val == NULL) {
+ if (val == NULL && *val) {
return 0;
}
size_t ret = 0;
@@ -356,7 +356,8 @@ static inline size_t compute_double_colon_len(const char *const val,
const char *dir;
iter = vim_colon_env_iter(val, iter, &dir, &dir_len);
if (dir != NULL && dir_len > 0) {
- ret += ((dir_len + count_commas(dir, dir_len) + common_suf_len + 1) * 2
+ ret += ((dir_len + count_commas(dir, dir_len) + common_suf_len
+ + !after_pathsep(dir, dir + dir_len)) * 2
+ single_suf_len);
}
} while (iter != NULL);
@@ -390,7 +391,7 @@ static inline char *add_colon_dirs(char *dest, const char *const val,
const bool forward)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET FUNC_ATTR_NONNULL_ARG(1)
{
- if (val == NULL) {
+ if (val == NULL && *val) {
return dest;
}
const void *iter = NULL;
@@ -401,7 +402,9 @@ static inline char *add_colon_dirs(char *dest, const char *const val,
val, iter, &dir, &dir_len);
if (dir != NULL && dir_len > 0) {
dest = strcpy_comma_escaped(dest, dir, dir_len);
- *dest++ = PATHSEP;
+ if (!after_pathsep(dest - 1, dest)) {
+ *dest++ = PATHSEP;
+ }
memmove(dest, "nvim", NVIM_SIZE);
dest += NVIM_SIZE;
if (suf1 != NULL) {
@@ -445,12 +448,14 @@ static inline char *add_dir(char *dest, const char *const dir,
const char *const suf2, const size_t len2)
FUNC_ATTR_NONNULL_RET FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_WARN_UNUSED_RESULT
{
- if (dir == NULL) {
+ if (dir == NULL && dir_len != 0) {
return dest;
}
dest = strcpy_comma_escaped(dest, dir, dir_len);
if (append_nvim) {
- *dest++ = PATHSEP;
+ if (!after_pathsep(dest - 1, dest)) {
+ *dest++ = PATHSEP;
+ }
memmove(dest, "nvim", NVIM_SIZE);
dest += NVIM_SIZE;
if (suf1 != NULL) {
@@ -484,17 +489,27 @@ static void set_runtimepath_default(void)
size_t vimruntime_len;
if (data_home != NULL) {
data_len = strlen(data_home);
- rtp_size += ((data_len + count_commas(data_home, data_len)
- + NVIM_SIZE + 1 + SITE_SIZE + 1 + 1) * 2 + AFTER_SIZE + 1);
+ if (data_len != 0) {
+ rtp_size += ((data_len + count_commas(data_home, data_len)
+ + NVIM_SIZE + 1 + SITE_SIZE + 1
+ + !after_pathsep(data_home, data_home + data_len)) * 2
+ + AFTER_SIZE + 1);
+ }
}
if (config_home != NULL) {
config_len = strlen(config_home);
- rtp_size += ((config_len + count_commas(config_home, config_len)
- + NVIM_SIZE + 1 + 1) * 2 + AFTER_SIZE + 1);
+ if (config_len != 0) {
+ rtp_size += ((config_len + count_commas(config_home, config_len)
+ + NVIM_SIZE + 1
+ + !after_pathsep(config_home, config_home + config_len)) * 2
+ + AFTER_SIZE + 1);
+ }
}
if (vimruntime != NULL) {
vimruntime_len = strlen(vimruntime);
- rtp_size += vimruntime_len + count_commas(vimruntime, vimruntime_len) + 1;
+ if (vimruntime_len != 0) {
+ rtp_size += vimruntime_len + count_commas(vimruntime, vimruntime_len) + 1;
+ }
}
rtp_size += compute_double_colon_len(data_dirs, NVIM_SIZE + 1 + SITE_SIZE + 1,
AFTER_SIZE + 1);