aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/lua/base64.c
diff options
context:
space:
mode:
authorGregory Anders <8965202+gpanders@users.noreply.github.com>2023-10-31 09:15:32 -0500
committerGitHub <noreply@github.com>2023-10-31 09:15:32 -0500
commit224f303ee54c54d2147f03010385e8cc48e42869 (patch)
treeb64c86baed2c7d4ea652eee233674188044e2da6 /src/nvim/lua/base64.c
parentadbe7f368397da21465f27181e254dd3694820e9 (diff)
downloadrneovim-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.c65
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;
+}