| 2011 | |
| 2012 | |
| 2013 | static int lua_ivm_set(lua_State *L) |
| 2014 | { |
| 2015 | const char *key, *raw_key; |
| 2016 | const char *value = NULL; |
| 2017 | apr_pool_t *pool; |
| 2018 | size_t str_len; |
| 2019 | lua_ivm_object *object = NULL; |
| 2020 | request_rec *r = ap_lua_check_request_rec(L, 1); |
| 2021 | key = luaL_checkstring(L, 2); |
| 2022 | luaL_checkany(L, 3); |
| 2023 | raw_key = apr_pstrcat(r->pool, "lua_ivm_", key, NULL); |
| 2024 | |
| 2025 | apr_global_mutex_lock(lua_ivm_mutex); |
| 2026 | pool = *((apr_pool_t**) apr_shm_baseaddr_get(lua_ivm_shm)); |
| 2027 | apr_pool_userdata_get((void **)&object, raw_key, pool); |
| 2028 | if (!object) { |
| 2029 | object = apr_pcalloc(pool, sizeof(lua_ivm_object)); |
| 2030 | ap_varbuf_init(pool, &object->vb, 2); |
| 2031 | object->size = 1; |
| 2032 | object->vb_size = 1; |
| 2033 | } |
| 2034 | object->type = lua_type(L, 3); |
| 2035 | if (object->type == LUA_TNUMBER) object->number = lua_tonumber(L, 3); |
| 2036 | else if (object->type == LUA_TBOOLEAN) object->number = lua_tonumber(L, 3); |
| 2037 | else if (object->type == LUA_TSTRING) { |
| 2038 | value = lua_tolstring(L, 3, &str_len); |
| 2039 | str_len++; /* add trailing \0 */ |
| 2040 | if ( str_len > object->vb_size) { |
| 2041 | ap_varbuf_grow(&object->vb, str_len); |
| 2042 | object->vb_size = str_len; |
| 2043 | } |
| 2044 | object->size = str_len-1; |
| 2045 | memset(object->vb.buf, 0, str_len); |
| 2046 | memcpy(object->vb.buf, value, str_len-1); |
| 2047 | } |
| 2048 | apr_pool_userdata_set(object, raw_key, NULL, pool); |
| 2049 | apr_global_mutex_unlock(lua_ivm_mutex); |
| 2050 | return 0; |
| 2051 | } |
| 2052 | |
| 2053 | static int lua_get_cookie(lua_State *L) |
| 2054 | { |
nothing calls this directly
no test coverage detected