1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #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();
- }
|