diff options
author | James McCoy <jamessan@jamessan.com> | 2020-07-31 01:17:24 -0400 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2021-01-31 07:54:20 -0500 |
commit | 7f50c692685c92d47e6ba6c3ee5f6fdccb78fec5 (patch) | |
tree | 2d1eda8d6437d4d339c244681fdb5b7ff5418c21 /src/nvim/eval/typval.c | |
parent | 55add1c1c8a9a040f02a880096ca153f7db3e501 (diff) | |
download | rneovim-7f50c692685c92d47e6ba6c3ee5f6fdccb78fec5.tar.gz rneovim-7f50c692685c92d47e6ba6c3ee5f6fdccb78fec5.tar.bz2 rneovim-7f50c692685c92d47e6ba6c3ee5f6fdccb78fec5.zip |
Use dict_T to pass env vars to process spawning code
Co-authored-by: Matthieu Coudron <mattator@gmail.com>
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r-- | src/nvim/eval/typval.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 02d32a4f86..2f8776def4 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -1523,6 +1523,33 @@ varnumber_T tv_dict_get_number(const dict_T *const d, const char *const key) return tv_get_number(&di->di_tv); } +/// Converts a dict to an environment +/// +/// +char **tv_dict_to_env(dict_T *denv) +{ + size_t env_size = (size_t)tv_dict_len(denv); + + size_t i = 0; + char **env = NULL; + + // + 1 for NULL + env = xmalloc((env_size + 1) * sizeof(*env)); + + TV_DICT_ITER(denv, var, { + const char *str = tv_get_string(&var->di_tv); + assert(str); + size_t len = STRLEN(var->di_key) + strlen(str) + strlen("=") + 1; + env[i] = xmalloc(len); + snprintf(env[i], len, "%s=%s", (char *)var->di_key, str); + i++; + }); + + // must be null terminated + env[env_size] = NULL; + return env; +} + /// Get a string item from a dictionary /// /// @param[in] d Dictionary to get item from. |