diff options
author | Daniel Hahler <git@thequod.de> | 2019-07-30 11:55:55 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2019-08-06 01:23:11 +0200 |
commit | d55b12ea508500760796ede2bca9b48f391afb80 (patch) | |
tree | 3547cf74151f62d98809036f69be0610107a301e /src | |
parent | fd66ad226221a22f223dcfca337e893d0a9cca46 (diff) | |
download | rneovim-d55b12ea508500760796ede2bca9b48f391afb80.tar.gz rneovim-d55b12ea508500760796ede2bca9b48f391afb80.tar.bz2 rneovim-d55b12ea508500760796ede2bca9b48f391afb80.zip |
f_environ: cleanup/refactor
- use os_getenvname_at_index / os_getenv
- f_getenv: empty (*p == NUL) is not null (undefined)
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 52 | ||||
-rw-r--r-- | src/nvim/os/env.c | 1 |
2 files changed, 12 insertions, 41 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 91c82a393e..7ffa59f298 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -8498,48 +8498,19 @@ static void f_empty(typval_T *argvars, typval_T *rettv, FunPtr fptr) /// "environ()" function static void f_environ(typval_T *argvars, typval_T *rettv, FunPtr fptr) { - int i = 0; - char_u *entry, *value; -# ifdef WIN32 - extern wchar_t **_wenviron; -# else - extern char **environ; -# endif - tv_dict_alloc_ret(rettv); -# ifdef WIN32 - if (*_wenviron == NULL) { - return; - } -# else - if (*environ == NULL) { - return; - } -# endif - - for (i = 0; ; i++) { -# ifdef WIN32 - uint16_t *p; - - if ((p = (uint16_t *)_wenviron[i]) == NULL) { - return; - } - entry = utf16_to_enc(p, NULL); -# else - if ((entry = (char_u *)environ[i]) == NULL) { - return; - } - entry = vim_strsave(entry); -# endif - if ((value = vim_strchr(entry, '=')) == NULL) { - xfree(entry); - continue; + for (int i = 0; ; i++) { + // TODO(justinmk): use os_copyfullenv from #7202 ? + char *envname = os_getenvname_at_index((size_t)i); + if (envname == NULL) { + break; } - *value++ = NUL; - tv_dict_add_str(rettv->vval.v_dict, (char *)entry, STRLEN((char *)entry), - (const char *)value); - xfree(entry); + const char *value = os_getenv(envname); + tv_dict_add_str(rettv->vval.v_dict, + (char *)envname, STRLEN((char *)envname), + value == NULL ? "" : value); + xfree(envname); } } @@ -8561,12 +8532,11 @@ static void f_getenv(typval_T *argvars, typval_T *rettv, FunPtr fptr) { char_u *p = (char_u *)vim_getenv(tv_get_string(&argvars[0])); - if (p == NULL || *p == NUL) { + if (p == NULL) { rettv->v_type = VAR_SPECIAL; rettv->vval.v_number = kSpecialVarNull; return; } - p = vim_strsave(p); rettv->vval.v_string = p; rettv->v_type = VAR_STRING; } diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c index 2278c325ea..bef78d8cc8 100644 --- a/src/nvim/os/env.c +++ b/src/nvim/os/env.c @@ -45,6 +45,7 @@ void env_init(void) } /// Like getenv(), but returns NULL if the variable is empty. +/// @see os_env_exists const char *os_getenv(const char *name) FUNC_ATTR_NONNULL_ALL { |