diff options
author | Gregory Anders <8965202+gpanders@users.noreply.github.com> | 2023-10-31 09:15:32 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-31 09:15:32 -0500 |
commit | 224f303ee54c54d2147f03010385e8cc48e42869 (patch) | |
tree | b64c86baed2c7d4ea652eee233674188044e2da6 /src/nvim/lua/base64.c | |
parent | adbe7f368397da21465f27181e254dd3694820e9 (diff) | |
download | rneovim-224f303ee54c54d2147f03010385e8cc48e42869.tar.gz rneovim-224f303ee54c54d2147f03010385e8cc48e42869.tar.bz2 rneovim-224f303ee54c54d2147f03010385e8cc48e42869.zip |
feat(stdlib): add vim.base64 module (#25843)
Add base64 encode() and decode() functions to a vim.base64 module.
Diffstat (limited to 'src/nvim/lua/base64.c')
-rw-r--r-- | src/nvim/lua/base64.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/nvim/lua/base64.c b/src/nvim/lua/base64.c new file mode 100644 index 0000000000..3f246839d5 --- /dev/null +++ b/src/nvim/lua/base64.c @@ -0,0 +1,65 @@ +#include <assert.h> +#include <lauxlib.h> +#include <lua.h> + +#include "nvim/base64.h" +#include "nvim/lua/base64.h" +#include "nvim/memory.h" + +static int nlua_base64_encode(lua_State *L) +{ + if (lua_gettop(L) < 1) { + return luaL_error(L, "Expected 1 argument"); + } + + if (lua_type(L, 1) != LUA_TSTRING) { + luaL_argerror(L, 1, "expected string"); + } + + size_t src_len = 0; + const char *src = lua_tolstring(L, 1, &src_len); + + const char *ret = base64_encode(src, src_len); + assert(ret != NULL); + lua_pushstring(L, ret); + xfree((void *)ret); + + return 1; +} + +static int nlua_base64_decode(lua_State *L) +{ + if (lua_gettop(L) < 1) { + return luaL_error(L, "Expected 1 argument"); + } + + if (lua_type(L, 1) != LUA_TSTRING) { + luaL_argerror(L, 1, "expected string"); + } + + size_t src_len = 0; + const char *src = lua_tolstring(L, 1, &src_len); + + const char *ret = base64_decode(src, src_len); + if (ret == NULL) { + return luaL_error(L, "Invalid input"); + } + + lua_pushstring(L, ret); + xfree((void *)ret); + + return 1; +} + +static const luaL_Reg base64_functions[] = { + { "encode", nlua_base64_encode }, + { "decode", nlua_base64_decode }, + { NULL, NULL }, +}; + +int luaopen_base64(lua_State *L) +{ + lua_newtable(L); + luaL_register(L, NULL, base64_functions); + return 1; +} |