[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: luaL_loadstring complains on syntax, while lua executes script problemless
- From: Nagaev Boris <bnagaev@...>
- Date: Wed, 22 Apr 2015 20:49:32 +0000
On Wed, Apr 22, 2015 at 7:23 PM, basiliscos@openmailbox.org
<basiliscos@openmailbox.org> wrote:
> Hello dear lua community,
>
> I'm experimenting with baby C-server with lua scripting on it. I have
> met the following issue: if I load the sample script from my server
> luaL_loadstring tells about syntax error; meanwhile when I run
> my script in console it compiles (and runs) without any problems.
>
> $ lua ./script.lua && echo "OK"
> ls -lah / function: 0x7e2c00
> OK
>
> $ cat script.lua
> local my_callback = function(exit_code, stdout, stderr)
> print 'Hello from callback';
> end
>
> my_fun = print;
> --print 'Hello from lua';
> my_fun(
> 'ls',
> '-lah',
> '/',
> my_callback);
> --print 'Goodbye from lua';
>
> $ cat my.c
> #include <fcntl.h>
> #include <pthread.h>
> #include <stdarg.h>
> #include <stdint.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <unistd.h>
>
> #include "lua.h"
> #include "lauxlib.h"
> #include "lualib.h"
>
> int lua_my_fun(lua_State *L) {
> return 0;
> }
>
> static char* script;
>
> static int load_script(char* script_path) {
> struct stat script_stat;
> int result;
> FILE *script_file;
> size_t records_read;
>
> result = stat(script_path, &script_stat);
> if (result) {
> perror("error get script stats");
> return -1;
> }
>
> script = malloc(script_stat.st_size);
> if (!script) {
> fprintf(stderr, "cannot allocate %ld bytes for script\n", script_stat.st_size);
> return -1;
> }
>
> script_file = fopen(script_path, "r");
> if (!script_file) {
> perror("cannot open script file");
> return -1;
> }
>
> records_read = fread(script, script_stat.st_size, 1, script_file);
> if (records_read != 1) {
> fprintf(stderr, "error reading script %s\n", script_path);
> return -1;
> }
>
> /* success */
> return 0;
> }
>
> int main() {
> load_script("script.lua");
> lua_State *L = luaL_newstate();
> luaL_openlibs(L);
> lua_pushcfunction(L, lua_my_fun);
> lua_setglobal(L, "my_fun");
> if (luaL_loadstring(L, script)) {
> fprintf(stderr, "error in script:\n %s\n:%s\n", script, lua_tostring(L, -1));
> }
> }
>
> $ cc my.c -o a -l lua && ./a
> error in script:
> local my_callback = function(exit_code, stdout, stderr)
> print 'Hello from callback';
> end
>
> my_fun = print;
> --print 'Hello from lua';
> my_fun(
> 'ls',
> '-lah',
> '/',
> my_callback);
> --print 'Goodbye from lua';
> A
> :[string "local my_callback = function(exit_code, stdout, stderr)..."]:13: '=' expected near 'char(2)'
>
> In the same time, when I delete comments in script.lua, it executes
> correctly. What is wrong?
>
> Thanks for any help!
>
> PS.
> $ lua -v
> Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
>
>
> --
> Best regards,
> Bασιλίσκος Arcticus ὑπέρnihilisticus
> (aka Ivan Baidakou) <basiliscos@openmailbox.org>
>
Hello,
I had the same error, when loaded Lua script in C string. The problem
was that line ends were removed from my Lua code for some reason and
first "--" was interpreted as a comment from this place in code to the
end of code.
Double check line ends in your Lua script.
PS. Why not to use luaL_dofile?
--
Best regards,
Boris Nagaev