Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read Lua table from C

I'm trying to pass a Lua table to my C program but I don´t know how to do it.

My Lua code:

local stages = {}
stages[1] = stage1
stages[2] = stage2
stages[3] = stage3

lstage.buildpollingtable(stages)

My C code:

static int lstage_build_polling_table (lua_State * L) {    
    luaL_checktype(L, 1, LUA_TTABLE);

    lua_getfield(L, 1, "stage1");
    lua_getfield(L, 1, "stage2");
    lua_getfield(L, 1, "stage3");

    stage_t s1 = lstage_tostage(L, -3);
    stage_t s2 = lstage_tostage(L, -2);
    stage_t s3 = lstage_tostage(L, -1);

    printf("%d\n",s1->priority);
    printf("%d\n",s2->priority);
    printf("%d\n",s3->priority);

    return 1;
}

What do I have to do to run all over the elements? This code generates an error like this:

bad argument #-3 to 'buildpollingtable' (lstage-Stage * expected, got table)

Can anyone explain what am I doing wrong?

like image 267
briba Avatar asked Oct 29 '14 01:10

briba


1 Answers

Your table does not have fields named stage1, etc., only fields 1, 2, 3. So try

lua_rawgeti(L,1,1);
lua_rawgeti(L,1,2);
lua_rawgeti(L,1,3);

instead of

lua_getfield(L, 1, "stage1");
lua_getfield(L, 1, "stage2");
lua_getfield(L, 1, "stage3");
like image 94
lhf Avatar answered Oct 22 '22 21:10

lhf