]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-lua: Add callback typecheck for dlua_pcall_yieldable
authorAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 22 Mar 2021 08:36:24 +0000 (10:36 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 22 Mar 2021 08:41:50 +0000 (10:41 +0200)
src/lib-lua/dlua-resume.c
src/lib-lua/dlua-script-private.h

index 763fd193e50370e82a03df1b4f3d89e157fbf429..1e792558a494f53b721d523f36668471db31c5ef 100644 (file)
@@ -150,6 +150,7 @@ void dlua_pcall_yieldable_resume(lua_State *L, int nargs)
  *
  * Returns -1 on error or 0 on success.
  */
+#undef dlua_pcall_yieldable
 int dlua_pcall_yieldable(lua_State *L, const char *func_name, int nargs,
                         dlua_pcall_yieldable_callback_t *callback,
                         void *context, const char **error_r)
index bb38ba7b28d2665d5b74b54e73676d36e0c3803d..2beee6190ddba365f64f8ff000eb0de9cca38f3c 100644 (file)
@@ -193,9 +193,12 @@ void dlua_script_close_thread(struct dlua_script *script, lua_State **_L);
  *   0 = function called, callback will be called in the future
  */
 int dlua_pcall_yieldable(lua_State *L, const char *func_name, int nargs,
-                        void (*callback)(lua_State *, void *, int),
+                        dlua_pcall_yieldable_callback_t *callback,
                         void *context, const char **error_r);
-
+#define dlua_pcall_yieldable(L, func_name, nargs, callback, context, error_r) \
+       dlua_pcall_yieldable(L, func_name + \
+               CALLBACK_TYPECHECK(callback, void (*)(lua_State *, typeof(context), int)), \
+               nargs, (dlua_pcall_yieldable_callback_t *)callback, context, error_r)
 /*
  * Resume yielded function execution.
  *