From: Henri Menke <henrimenke@gmail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: LuaTeX incompatible with Lua
Date: Thu, 21 Nov 2019 20:43:03 +1300 [thread overview]
Message-ID: <5f4e34da-6a13-93e8-c294-53fef0581bec@gmail.com> (raw)
In-Reply-To: <9303d3b5-d2b8-5d80-4f19-3e1f59cdb2d8@gmail.com>
Below I include a suggestion on how to do this sort of version agnostic.
Cheers, Henri
Live example on Wandbox:
https://wandbox.org/permlink/jEn9kNnPB0t5rwjP
---
#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>
#include <assert.h>
#include <stdio.h>
static int (*lua_os_execute)(lua_State *L) = NULL;
static int os_execute(lua_State *L) {
// Do whatever
printf("Hello Hans!\n");
// Safeguard
assert(lua_os_execute != NULL);
// Return wrapped
return lua_os_execute(L);
}
LUAMOD_API int luaopen_oslibext(lua_State *L) {
lua_getglobal(L, "os");
// Get the address of the original function
if (lua_os_execute == NULL) {
lua_getfield(L, -1, "execute");
lua_os_execute = lua_tocfunction(L, -1);
lua_pop(L, 1);
}
// Push the new function to overwrite the old one
lua_pushcfunction(L, os_execute);
lua_setfield(L, -2, "execute");
return 1;
}
int main(void) {
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaopen_oslibext(L);
if (luaL_dostring(L, "os.execute([[date]])") != 0) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);
}
lua_close(L);
}
On 11/21/19 8:17 PM, Henri Menke wrote:
> Dear list,
>
> The following Lua script behaves differently when executed in Lua vs.
> LuaTeX.
>
> print(os.execute("date"))
>
> It seems that the definition of os_execute in loslibext.c was copied
> over from Lua 5.1 and not adapted to newer versions.
>
> $ lua5.1 test.lua
> 0
> $ lua5.2 test.lua
> true exit 0
> $ lua5.3 test.lua
> true exit 0
> $ texlua test.lua
> 0
> $ luajit test.lua
> 0
> $ texluajit test.lua
> 0
>
> As you can see from the example, this comes with the additional
> complication that LuaJIT has Lua 5.1 behaviour and should also retain
> that.
>
> Cheers, Henri
>
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________
next prev parent reply other threads:[~2019-11-21 7:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-21 7:17 Henri Menke
2019-11-21 7:43 ` Henri Menke [this message]
2019-11-21 8:18 ` Hans Hagen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5f4e34da-6a13-93e8-c294-53fef0581bec@gmail.com \
--to=henrimenke@gmail.com \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).