mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-08 19:00:27 +00:00
Update redbean SQLite API to return current error callback
This commit is contained in:
parent
c5d8d915b3
commit
ea2c563e85
1 changed files with 14 additions and 15 deletions
|
@ -2469,33 +2469,32 @@ static void log_callback(void* user, int rc, const char *msg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lsqlite_config(lua_State *L) {
|
static int lsqlite_config(lua_State *L) {
|
||||||
int config = luaL_checkint(L, 1);
|
switch (luaL_checkint(L, 1)) {
|
||||||
int result = SQLITE_OK;
|
|
||||||
|
|
||||||
switch (config) {
|
|
||||||
case SQLITE_CONFIG_LOG:
|
case SQLITE_CONFIG_LOG:
|
||||||
|
/* make sure we have an userdata field (even if nil) */
|
||||||
|
lua_settop(L, 3);
|
||||||
|
|
||||||
|
// prepate to return current (possibly nil) values
|
||||||
|
lua_pushinteger(L, SQLITE_OK);
|
||||||
|
lua_rawgeti(L, LUA_REGISTRYINDEX, log_cb); /* get callback */
|
||||||
|
lua_rawgeti(L, LUA_REGISTRYINDEX, log_udata); /* get callback user data */
|
||||||
|
|
||||||
luaL_unref(L, LUA_REGISTRYINDEX, log_cb);
|
luaL_unref(L, LUA_REGISTRYINDEX, log_cb);
|
||||||
luaL_unref(L, LUA_REGISTRYINDEX, log_udata);
|
luaL_unref(L, LUA_REGISTRYINDEX, log_udata);
|
||||||
|
if (lua_isnil(L, 2)) {
|
||||||
if (lua_gettop(L) < 2 || lua_isnil(L, 2)) {
|
|
||||||
log_cb =
|
log_cb =
|
||||||
log_udata = LUA_NOREF;
|
log_udata = LUA_NOREF;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
luaL_checktype(L, 2, LUA_TFUNCTION);
|
luaL_checktype(L, 2, LUA_TFUNCTION);
|
||||||
/* make sure we have an userdata field (even if nil) */
|
lua_pushvalue(L, 2);
|
||||||
lua_settop(L, 3);
|
lua_pushvalue(L, 3);
|
||||||
|
|
||||||
log_udata = luaL_ref(L, LUA_REGISTRYINDEX);
|
log_udata = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||||
log_cb = luaL_ref(L, LUA_REGISTRYINDEX);
|
log_cb = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||||
}
|
}
|
||||||
break;
|
return 3; // return OK and previous callback and userdata
|
||||||
default:
|
|
||||||
result = SQLITE_MISUSE;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
lua_pushinteger(L, result);
|
return pusherr(L, SQLITE_MISUSE);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lsqlite_newindex(lua_State *L) {
|
static int lsqlite_newindex(lua_State *L) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue