aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Janda <siffiejoe@gmx.net>2021-12-18 11:01:43 +0100
committerGitHub <noreply@github.com>2021-12-18 11:01:43 +0100
commit22021d7e013dde01376d74e8e09cb00402bd7042 (patch)
tree37b98462ec1e55a65363f7de267fcf2005eba22b
parente00fd0a415694dc15687593e355441af6dfa30bd (diff)
downloadlua-compat-5.3-22021d7e013dde01376d74e8e09cb00402bd7042.tar.gz
lua-compat-5.3-22021d7e013dde01376d74e8e09cb00402bd7042.tar.bz2
lua-compat-5.3-22021d7e013dde01376d74e8e09cb00402bd7042.zip
Convert lua_pushlstring from a macro to a function (#55)
This should avoid issues with multiple evaluations of the arguments, which should be very rare, but could in principle happen.
-rw-r--r--c-api/compat-5.3.c8
-rw-r--r--c-api/compat-5.3.h9
2 files changed, 11 insertions, 6 deletions
diff --git a/c-api/compat-5.3.c b/c-api/compat-5.3.c
index 42b0a4b..64592d6 100644
--- a/c-api/compat-5.3.c
+++ b/c-api/compat-5.3.c
@@ -715,6 +715,14 @@ void luaL_pushresult (luaL_Buffer_53 *B) {
715#if defined( LUA_VERSION_NUM ) && LUA_VERSION_NUM <= 502 715#if defined( LUA_VERSION_NUM ) && LUA_VERSION_NUM <= 502
716 716
717 717
718COMPAT53_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) {
719#undef lua_pushlstring
720 lua_pushlstring(L, len > 0 ? s : "", len);
721#define lua_pushlstring COMPAT53_CONCAT(COMPAT53_PREFIX, _pushlstring_53)
722 return lua_tostring(L, -1);
723}
724
725
718COMPAT53_API int lua_geti (lua_State *L, int index, lua_Integer i) { 726COMPAT53_API int lua_geti (lua_State *L, int index, lua_Integer i) {
719 index = lua_absindex(L, index); 727 index = lua_absindex(L, index);
720 lua_pushinteger(L, i); 728 lua_pushinteger(L, i);
diff --git a/c-api/compat-5.3.h b/c-api/compat-5.3.h
index b730a4b..6f66dad 100644
--- a/c-api/compat-5.3.h
+++ b/c-api/compat-5.3.h
@@ -142,9 +142,6 @@ COMPAT53_API void lua_len (lua_State *L, int i);
142#define lua_pushstring(L, s) \ 142#define lua_pushstring(L, s) \
143 (lua_pushstring((L), (s)), lua_tostring((L), -1)) 143 (lua_pushstring((L), (s)), lua_tostring((L), -1))
144 144
145#define lua_pushlstring(L, s, len) \
146 ((((len) == 0) ? lua_pushlstring((L), "", 0) : lua_pushlstring((L), (s), (len))), lua_tostring((L), -1))
147
148#ifndef luaL_newlibtable 145#ifndef luaL_newlibtable
149# define luaL_newlibtable(L, l) \ 146# define luaL_newlibtable(L, l) \
150 (lua_createtable((L), 0, sizeof((l))/sizeof(*(l))-1)) 147 (lua_createtable((L), 0, sizeof((l))/sizeof(*(l))-1))
@@ -290,6 +287,9 @@ typedef int (*lua_KFunction)(lua_State *L, int status, lua_KContext ctx);
290#define lua_gettable(L, i) \ 287#define lua_gettable(L, i) \
291 (lua_gettable((L), (i)), lua_type((L), -1)) 288 (lua_gettable((L), (i)), lua_type((L), -1))
292 289
290#define lua_pushlstring COMPAT53_CONCAT(COMPAT53_PREFIX, _pushlstring_53)
291COMPAT53_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len);
292
293#define lua_geti COMPAT53_CONCAT(COMPAT53_PREFIX, _geti) 293#define lua_geti COMPAT53_CONCAT(COMPAT53_PREFIX, _geti)
294COMPAT53_API int lua_geti (lua_State *L, int index, lua_Integer i); 294COMPAT53_API int lua_geti (lua_State *L, int index, lua_Integer i);
295 295
@@ -352,9 +352,6 @@ COMPAT53_API void luaL_requiref (lua_State *L, const char *modname,
352#define lua_getuservalue(L, i) \ 352#define lua_getuservalue(L, i) \
353 (lua_getuservalue((L), (i)), lua_type((L), -1)) 353 (lua_getuservalue((L), (i)), lua_type((L), -1))
354 354
355#define lua_pushlstring(L, s, len) \
356 (((len) == 0) ? lua_pushlstring((L), "", 0) : lua_pushlstring((L), (s), (len)))
357
358#define lua_rawgetp(L, i, p) \ 355#define lua_rawgetp(L, i, p) \
359 (lua_rawgetp((L), (i), (p)), lua_type((L), -1)) 356 (lua_rawgetp((L), (i), (p)), lua_type((L), -1))
360 357