diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/option.c | 37 | 
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); | 
