diff --git a/logfoo.c b/logfoo.c index 165996c..85e895f 100644 --- a/logfoo.c +++ b/logfoo.c @@ -10,6 +10,11 @@ #define EXIT_LOGFILE_HANDLING 2 #define EXIT_LUAFILE_HANDLING 3 +// // TODO: assign to lua +// #define COLOR_RED 1 +// #define COLOR_BLUE 2 +// #define COLOR_GREEN 3 + void trim(char *string) { if (strlen(string) > 0 && string[strlen(string) - 1] == '\n') { string[strlen(string) - 1] = '\0'; @@ -17,6 +22,66 @@ void trim(char *string) { } } +int luaFilterCall(lua_State *L, char *line, size_t len) { + int filter; + + lua_getglobal(L, "filter"); + lua_pushlstring(L, line, len); + if (lua_pcall(L, 1, 1, 0) != 0) { + fprintf(stderr, "Error running LUA function 'filter': %s\n", lua_tostring(L, -1)); + exit(EXIT_LUAFILE_HANDLING); + } + + if (!lua_isboolean(L, -1)) { + fprintf(stderr, "LUA function 'filter' did not return a boolean"); + exit(EXIT_LUAFILE_HANDLING); + } + + filter = lua_toboolean(L, -1); + lua_pop(L, 1); + + return filter; +} + +const char* luaFormatCall(lua_State *L, char *line, size_t len, size_t *formatLen) { + lua_getglobal(L, "format"); + lua_pushlstring(L, line, len); + if (lua_pcall(L, 1, 1, 0) != 0) { + fprintf(stderr, "Error running LUA function 'format': %s\n", lua_tostring(L, -1)); + exit(EXIT_LUAFILE_HANDLING); + } + + if (!lua_isstring(L, -1)) { + fprintf(stderr, "LUA function 'format' did not return a string\n"); + exit(EXIT_LUAFILE_HANDLING); + } + + return lua_tolstring(L, -1 , formatLen); +} + +// const char* luaColor(lua_State *L) { +// size_t textParaLen; +// const char *textParaStr; +// int colorPara; +// size_t textColorLen; +// char *textColorStr; + +// textParaStr = luaL_checklstring(L, 1, &textParaLen); +// colorPara = luaL_checkinteger(L, 2); + +// switch (colorPara) { +// case COLOR_RED: + +// //lua_pushlstring(); +// break; +// default: +// fprintf(stderr, "LUA function 'format' did not return a string\n"); +// exit(EXIT_LUAFILE_HANDLING); +// } +// } + + + int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); @@ -28,7 +93,7 @@ int main(int argc, char *argv[]) { char *luafile = argv[1]; char *line = NULL; size_t len = 0; - ssize_t read; + ssize_t bytesRead; FILE *fp; lua_State *L; L = luaL_newstate(); @@ -46,45 +111,18 @@ int main(int argc, char *argv[]) { return EXIT_LUAFILE_HANDLING; } - while ((read = getline(&line, &len, fp)) != -1) { - int filter; + while ((bytesRead = getline(&line, &len, fp)) != -1) { size_t formatLen; const char *formatLine; trim(line); - lua_getglobal(L, "filter"); - lua_pushlstring(L, line, read); - if (lua_pcall(L, 1, 1, 0) != 0) { - fprintf(stderr, "Error running LUA function 'filter': %s\n", lua_tostring(L, -1)); - return EXIT_LUAFILE_HANDLING; - } - - if (!lua_isboolean(L, -1)) { - fprintf(stderr, "LUA function 'filter' did not return a boolean"); - return EXIT_LUAFILE_HANDLING; - } - - filter = lua_toboolean(L, -1); - lua_pop(L, 1); - if (filter) { + if (luaFilterCall(L, line, bytesRead)) { continue; } - lua_getglobal(L, "format"); - lua_pushlstring(L, line, read); - if (lua_pcall(L, 1, 1, 0) != 0) { - fprintf(stderr, "Error running LUA function 'format': %s\n", lua_tostring(L, -1)); - return EXIT_LUAFILE_HANDLING; - } - - if (!lua_isstring(L, -1)) { - fprintf(stderr, "LUA function 'format' did not return a string"); - return EXIT_LUAFILE_HANDLING; - } - - formatLine = lua_tolstring(L, -1 , &formatLen); - printf("(%zu) %s\n", formatLen, formatLine); + formatLine = luaFormatCall(L, line, bytesRead, &formatLen); + printf("%s\n", formatLine); } if (errno) { fprintf(stderr, "Error reading file %s: %s\n", logfile, strerror(errno));