53 lines
782 B
C
53 lines
782 B
C
#include "skynet.h"
|
|
#include "skynet_env.h"
|
|
#include "spinlock.h"
|
|
|
|
#include <lua.h>
|
|
#include <lauxlib.h>
|
|
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
|
|
struct skynet_env {
|
|
struct spinlock lock;
|
|
lua_State *L;
|
|
};
|
|
|
|
static struct skynet_env *E = NULL;
|
|
|
|
const char *
|
|
skynet_getenv(const char *key) {
|
|
SPIN_LOCK(E)
|
|
|
|
lua_State *L = E->L;
|
|
|
|
lua_getglobal(L, key);
|
|
const char * result = lua_tostring(L, -1);
|
|
lua_pop(L, 1);
|
|
|
|
SPIN_UNLOCK(E)
|
|
|
|
return result;
|
|
}
|
|
|
|
void
|
|
skynet_setenv(const char *key, const char *value) {
|
|
SPIN_LOCK(E)
|
|
|
|
lua_State *L = E->L;
|
|
lua_getglobal(L, key);
|
|
assert(lua_isnil(L, -1));
|
|
lua_pop(L,1);
|
|
lua_pushstring(L,value);
|
|
lua_setglobal(L,key);
|
|
|
|
SPIN_UNLOCK(E)
|
|
}
|
|
|
|
void
|
|
skynet_env_init() {
|
|
E = skynet_malloc(sizeof(*E));
|
|
SPIN_INIT(E)
|
|
E->L = luaL_newstate();
|
|
}
|