C API、lua_load()

/*
 * $ gcc -Wall -W -I/usr/include/lua50 -o 2008102800 -llua50 2008102800.c
 */

#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>

/* from lauxlib.c */
typedef struct LoadF {
  FILE *f;
  char buff[LUAL_BUFFERSIZE];
} LoadF;

static const char *getF (lua_State *L, void *ud, size_t *size) {
  LoadF *lf = (LoadF *)ud;
  (void)L;
  if (feof(lf->f)) return NULL;
  *size = fread(lf->buff, 1, LUAL_BUFFERSIZE, lf->f);
  return (*size > 0) ? lf->buff : NULL;
}

int main(void) {
  lua_State *L;
  LoadF lf;
  char *filename = "foo";

  L = lua_open();

  lua_pushfstring(L, "@%s", filename);
  printf("%d\n", lua_gettop(L));

  lf.f = fopen(filename, "r");
  lua_load(L, getF, &lf, lua_tostring(L, -1));
  printf("%d\n", lua_gettop(L));
  printf("%s\n", lua_typename(L, lua_type(L, -1)));
  fclose(lf.f);

  lua_close(L);

  return 0;
}

で、

1
2
function

実行するには?