base64.c (1385B)
1 #include <assert.h> 2 #include <lauxlib.h> 3 #include <lua.h> 4 #include <stddef.h> 5 6 #include "nvim/base64.h" 7 #include "nvim/lua/base64.h" 8 #include "nvim/memory.h" 9 10 #include "lua/base64.c.generated.h" 11 12 static int nlua_base64_encode(lua_State *L) 13 { 14 if (lua_gettop(L) < 1) { 15 return luaL_error(L, "Expected 1 argument"); 16 } 17 18 if (lua_type(L, 1) != LUA_TSTRING) { 19 luaL_argerror(L, 1, "expected string"); 20 } 21 22 size_t src_len = 0; 23 const char *src = lua_tolstring(L, 1, &src_len); 24 25 const char *ret = base64_encode(src, src_len); 26 assert(ret != NULL); 27 lua_pushstring(L, ret); 28 xfree((void *)ret); 29 30 return 1; 31 } 32 33 static int nlua_base64_decode(lua_State *L) 34 { 35 if (lua_gettop(L) < 1) { 36 return luaL_error(L, "Expected 1 argument"); 37 } 38 39 if (lua_type(L, 1) != LUA_TSTRING) { 40 luaL_argerror(L, 1, "expected string"); 41 } 42 43 size_t src_len = 0; 44 const char *src = lua_tolstring(L, 1, &src_len); 45 46 size_t out_len = 0; 47 const char *ret = base64_decode(src, src_len, &out_len); 48 if (ret == NULL) { 49 return luaL_error(L, "Invalid input"); 50 } 51 52 lua_pushlstring(L, ret, out_len); 53 xfree((void *)ret); 54 55 return 1; 56 } 57 58 static const luaL_Reg base64_functions[] = { 59 { "encode", nlua_base64_encode }, 60 { "decode", nlua_base64_decode }, 61 { NULL, NULL }, 62 }; 63 64 int luaopen_base64(lua_State *L) 65 { 66 lua_newtable(L); 67 luaL_register(L, NULL, base64_functions); 68 return 1; 69 }