diff options
Diffstat (limited to 'src/nvim/os/env.c')
| -rw-r--r-- | src/nvim/os/env.c | 57 | 
1 files changed, 30 insertions, 27 deletions
| diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c index 8f7a6e72b5..a7d1037cfc 100644 --- a/src/nvim/os/env.c +++ b/src/nvim/os/env.c @@ -521,10 +521,11 @@ static char *remove_tail(char *path, char *pend, char *dirname)    return pend;  } -/// Iterate over colon-separated list +/// Iterate over a delimited list.  ///  /// @note Environment variables must not be modified during iteration.  /// +/// @param[in]   delim Delimiter character.  /// @param[in]   val   Value of the environment variable to iterate over.  /// @param[in]   iter  Pointer used for iteration. Must be NULL on first  ///                    iteration. @@ -533,18 +534,19 @@ static char *remove_tail(char *path, char *pend, char *dirname)  /// @param[out]  len   Location where current directory length should be saved.  ///  /// @return Next iter argument value or NULL when iteration should stop. -const void *vim_colon_env_iter(const char *const val, -                               const void *const iter, -                               const char **const dir, -                               size_t *const len) -  FUNC_ATTR_NONNULL_ARG(1, 3, 4) FUNC_ATTR_WARN_UNUSED_RESULT +const void *vim_env_iter(const char delim, +                         const char *const val, +                         const void *const iter, +                         const char **const dir, +                         size_t *const len) +  FUNC_ATTR_NONNULL_ARG(2, 4, 5) FUNC_ATTR_WARN_UNUSED_RESULT  {    const char *varval = (const char *) iter;    if (varval == NULL) {      varval = val;    }    *dir = varval; -  const char *const dirend = strchr(varval, ':'); +  const char *const dirend = strchr(varval, delim);    if (dirend == NULL) {      *len = strlen(varval);      return NULL; @@ -554,10 +556,11 @@ const void *vim_colon_env_iter(const char *const val,    }  } -/// Iterate over colon-separated list in reverse order +/// Iterate over a delimited list in reverse order.  ///  /// @note Environment variables must not be modified during iteration.  /// +/// @param[in]   delim Delimiter character.  /// @param[in]   val   Value of the environment variable to iterate over.  /// @param[in]   iter  Pointer used for iteration. Must be NULL on first  ///                    iteration. @@ -566,18 +569,19 @@ const void *vim_colon_env_iter(const char *const val,  /// @param[out]  len   Location where current directory length should be saved.  ///  /// @return Next iter argument value or NULL when iteration should stop. -const void *vim_colon_env_iter_rev(const char *const val, -                                   const void *const iter, -                                   const char **const dir, -                                   size_t *const len) -  FUNC_ATTR_NONNULL_ARG(1, 3, 4) FUNC_ATTR_WARN_UNUSED_RESULT +const void *vim_env_iter_rev(const char delim, +                             const char *const val, +                             const void *const iter, +                             const char **const dir, +                             size_t *const len) +  FUNC_ATTR_NONNULL_ARG(2, 4, 5) FUNC_ATTR_WARN_UNUSED_RESULT  {    const char *varend = (const char *) iter;    if (varend == NULL) {      varend = val + strlen(val) - 1;    } -  const size_t varlen = (size_t) (varend - val) + 1; -  const char *const colon = xmemrchr(val, ':', varlen); +  const size_t varlen = (size_t)(varend - val) + 1; +  const char *const colon = xmemrchr(val, (uint8_t)delim, varlen);    if (colon == NULL) {      *len = varlen;      *dir = val; @@ -634,18 +638,17 @@ char *vim_getenv(const char *name)      char exe_name[MAXPATHL];      // Find runtime path relative to the nvim binary: ../share/nvim/runtime      if (vim_path == NULL) { -      size_t exe_name_len = MAXPATHL; -      if (os_exepath(exe_name, &exe_name_len) == 0) { -        char *path_end = (char *)path_tail_with_sep((char_u *)exe_name); -        *path_end = '\0';  // remove the trailing "nvim.exe" -        path_end = (char *)path_tail((char_u *)exe_name); -        *path_end = '\0';  // remove the trailing "bin/" -        if (append_path( -            exe_name, -            "share" _PATHSEPSTR "nvim" _PATHSEPSTR "runtime" _PATHSEPSTR, -            MAXPATHL) == OK) { -          vim_path = exe_name;  // -V507 -        } +      xstrlcpy(exe_name, (char *)get_vim_var_str(VV_PROGPATH), +               sizeof(exe_name)); +      char *path_end = (char *)path_tail_with_sep((char_u *)exe_name); +      *path_end = '\0';  // remove the trailing "nvim.exe" +      path_end = (char *)path_tail((char_u *)exe_name); +      *path_end = '\0';  // remove the trailing "bin/" +      if (append_path( +          exe_name, +          "share" _PATHSEPSTR "nvim" _PATHSEPSTR "runtime" _PATHSEPSTR, +          MAXPATHL) == OK) { +        vim_path = exe_name;  // -V507        }      } | 
