diff options
author | Gregory Anders <greg@gpanders.com> | 2022-11-05 19:30:48 -0600 |
---|---|---|
committer | Gregory Anders <greg@gpanders.com> | 2022-11-17 08:23:41 -0700 |
commit | 294910a1ffd11bea0081c2b92632628ef0462eb1 (patch) | |
tree | fa2636155cf69bcced5b89f3b3ffdf8498398d89 /src/nvim/lua/executor.c | |
parent | f1922e78a1df1b1d32779769432fb5586edf5fbb (diff) | |
download | rneovim-294910a1ffd11bea0081c2b92632628ef0462eb1.tar.gz rneovim-294910a1ffd11bea0081c2b92632628ef0462eb1.tar.bz2 rneovim-294910a1ffd11bea0081c2b92632628ef0462eb1.zip |
feat(exrc): use vim.secure.read() for 'exrc' option
Diffstat (limited to 'src/nvim/lua/executor.c')
-rw-r--r-- | src/nvim/lua/executor.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index 79cc3ed112..43a3b12a98 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -2193,3 +2193,27 @@ plain: kv_printf(str, "<Lua %d>", ref); return str.items; } + +char *nlua_read_secure(const char *path) +{ + lua_State *const lstate = global_lstate; + lua_getglobal(lstate, "vim"); + lua_getfield(lstate, -1, "secure"); + lua_getfield(lstate, -1, "read"); + lua_pushstring(lstate, path); + lua_call(lstate, 1, 1); + + size_t len = 0; + const char *contents = lua_tolstring(lstate, -1, &len); + char *buf = NULL; + if (contents != NULL) { + // Add one to include trailing null byte + buf = xcalloc(len + 1, sizeof(char)); + memcpy(buf, contents, len + 1); + } + + // Pop return value, "vim", and "secure" + lua_pop(lstate, 3); + + return buf; +} |