neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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 }