]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-lua: dlua-script - Add dlua_pushfstring
authorAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 16 Apr 2021 10:10:41 +0000 (13:10 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 12 May 2021 09:06:46 +0000 (09:06 +0000)
Uses full sprintf

src/lib-lua/Makefile.am
src/lib-lua/dlua-pushstring.c [new file with mode: 0644]
src/lib-lua/dlua-script-private.h

index a0cc19ba38664e9944ccf354574188d68f26ef90..c19ac8a13d9551b80e6cbdfd0cff9de47b35265f 100644 (file)
@@ -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 (file)
index 0000000..d985e17
--- /dev/null
@@ -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;
+}
index e02b8394535fe5a26a7bbadc4a945b73b9c0491f..35035c0ee7eb327a397dc637d60d516a402174c7 100644 (file)
@@ -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
  *