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
___________________________________________________________________________________

Reply via email to