From: Aki Tuomi Date: Fri, 16 Apr 2021 10:10:41 +0000 (+0300) Subject: lib-lua: dlua-script - Add dlua_pushfstring X-Git-Tag: 2.3.16~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=890c7a058190e8f0a555d6ba175416f6a3e31a6d;p=thirdparty%2Fdovecot%2Fcore.git lib-lua: dlua-script - Add dlua_pushfstring Uses full sprintf --- diff --git a/src/lib-lua/Makefile.am b/src/lib-lua/Makefile.am index a0cc19ba38..c19ac8a13d 100644 --- a/src/lib-lua/Makefile.am +++ b/src/lib-lua/Makefile.am @@ -6,6 +6,7 @@ AM_CPPFLAGS = \ pkglib_LTLIBRARIES = libdovecot-lua.la libdovecot_lua_la_SOURCES = \ dlua-script.c \ + dlua-pushstring.c \ dlua-dovecot.c \ dlua-compat.c \ dlua-resume.c \ diff --git a/src/lib-lua/dlua-pushstring.c b/src/lib-lua/dlua-pushstring.c new file mode 100644 index 0000000000..d985e177c2 --- /dev/null +++ b/src/lib-lua/dlua-pushstring.c @@ -0,0 +1,26 @@ +/* Copyright (c) 2021 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "str.h" +#include "dlua-script-private.h" + +const char *dlua_pushvfstring(lua_State *L, const char *fmt, va_list argp) +{ + const char *str; + T_BEGIN { + str = t_strdup_vprintf(fmt, argp); + (void)lua_pushstring(L, str); + str = lua_tostring(L, -1); + } T_END; + return str; +} + +const char *dlua_pushfstring(lua_State *L, const char *fmt, ...) +{ + const char *str; + va_list argp; + va_start(argp, fmt); + str = dlua_pushvfstring(L, fmt, argp); + va_end(argp); + return str; +} diff --git a/src/lib-lua/dlua-script-private.h b/src/lib-lua/dlua-script-private.h index e02b839453..35035c0ee7 100644 --- a/src/lib-lua/dlua-script-private.h +++ b/src/lib-lua/dlua-script-private.h @@ -101,6 +101,10 @@ void dlua_push_event(lua_State *L, struct event *event); /* get event from given stack position */ struct event *dlua_check_event(lua_State *L, int arg); +/* improved lua_pushfstring, can handle full C format support */ +const char *dlua_pushvfstring(lua_State *L, const char *fmt, va_list argp) ATTR_FORMAT(2, 0); +const char *dlua_pushfstring(lua_State *L, const char *fmt, ...) ATTR_FORMAT(2, 3); + /* * Returns field from a Lua table *