From 06d9cc734bf0397b365d5d75b1766a4fb245d2f5 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Tue, 30 Jul 2019 11:37:39 +0200 Subject: [PATCH] exists(): return false for empty env var #10657 Fixes https://github.com/neovim/neovim/issues/3266 close #10657 --- src/nvim/eval.c | 2 +- test/functional/eval/environ_spec.lua | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 31a49faaf3..1d221bb600 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -8718,7 +8718,7 @@ static void f_exists(typval_T *argvars, typval_T *rettv, FunPtr fptr) const char *p = tv_get_string(&argvars[0]); if (*p == '$') { // Environment variable. // First try "normal" environment variables (fast). - if (os_getenv(p + 1) != NULL) { + if (os_env_exists(p + 1)) { n = true; } else { // Try expanding things like $VIM and ${HOME}. diff --git a/test/functional/eval/environ_spec.lua b/test/functional/eval/environ_spec.lua index eb52f9e2da..4c2adcf1bf 100644 --- a/test/functional/eval/environ_spec.lua +++ b/test/functional/eval/environ_spec.lua @@ -2,11 +2,17 @@ local helpers = require('test.functional.helpers')(after_each) local clear = helpers.clear local eq = helpers.eq local environ = helpers.funcs.environ +local exists = helpers.funcs.exists -describe('environ()', function() - it('handles empty env variable', function() +describe('environment variables', function() + it('environ() handles empty env variable', function() clear({env={EMPTY_VAR=""}}) eq("", environ()['EMPTY_VAR']) eq(nil, environ()['DOES_NOT_EXIST']) end) + it('exists() handles empty env variable', function() + clear({env={EMPTY_VAR=""}}) + eq(1, exists('$EMPTY_VAR')) + eq(0, exists('$DOES_NOT_EXIST')) + end) end)