MCPcopy Create free account
hub / github.com/apache/httpd / lua_ivm_set

Function lua_ivm_set

modules/lua/lua_request.c:2013–2051  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2011
2012
2013static 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
2053static int lua_get_cookie(lua_State *L)
2054{

Callers

nothing calls this directly

Calls 3

ap_varbuf_initFunction · 0.85
ap_varbuf_growFunction · 0.85
ap_lua_check_request_recFunction · 0.70

Tested by

no test coverage detected