From: Timo Sirainen Date: Fri, 10 Sep 2021 09:49:50 +0000 (+0300) Subject: lib-dict: dict-lua - Add set_timestamp() X-Git-Tag: 2.3.17~122 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a564b607de0b9cec42e2d435cd85160a923aadc4;p=thirdparty%2Fdovecot%2Fcore.git lib-dict: dict-lua - Add set_timestamp() --- diff --git a/src/lib-dict/dict-txn-lua.c b/src/lib-dict/dict-txn-lua.c index b6c6945c41..a7503ba136 100644 --- a/src/lib-dict/dict-txn-lua.c +++ b/src/lib-dict/dict-txn-lua.c @@ -23,12 +23,14 @@ static int lua_dict_transaction_rollback(lua_State *L); static int lua_dict_transaction_commit(lua_State *L); static int lua_dict_set(lua_State *L); static int lua_dict_unset(lua_State *L); +static int lua_dict_set_timestamp(lua_State *L); static luaL_Reg lua_dict_txn_methods[] = { { "rollback", lua_dict_transaction_rollback }, { "commit", lua_dict_transaction_commit }, { "set", lua_dict_set }, { "unset", lua_dict_unset }, + { "set_timestamp", lua_dict_set_timestamp }, { NULL, NULL }, }; @@ -226,3 +228,31 @@ int lua_dict_transaction_begin(lua_State *L) return 1; } + +/* + * Set timestamp to the transaction [-2,+0,e] + * + * Args: + * 1) userdata: struct lua_dict_txn * + * 2) PosixTimespec : { tv_sec, tv_nsec } + */ +static int lua_dict_set_timestamp(lua_State *L) +{ + struct lua_dict_txn *txn; + lua_Number tv_sec, tv_nsec; + + DLUA_REQUIRE_ARGS(L, 2); + + txn = xlua_dict_txn_getptr(L, 1, NULL); + if (dlua_table_get_number_by_str(L, 2, "tv_sec", &tv_sec) <= 0) + luaL_error(L, "tv_sec missing from table"); + if (dlua_table_get_number_by_str(L, 2, "tv_nsec", &tv_nsec) <= 0) + luaL_error(L, "tv_nsec missing from table"); + + struct timespec ts = { + .tv_sec = tv_sec, + .tv_nsec = tv_nsec + }; + dict_transaction_set_timestamp(txn->txn, &ts); + return 0; +}