#include #include #include #include #include #include #include #include #define EXIT_LOGFILE_HANDLING 2 #define EXIT_LUAFILE_HANDLING 3 void trim(char *string) { if (strlen(string) > 0 && string[strlen(string) - 1] == '\n') { string[strlen(string) - 1] = '\0'; trim(string); } } int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } int status; char *logfile = argv[2]; char *luafile = argv[1]; char *line = NULL; size_t len = 0; ssize_t read; FILE *fp; lua_State *L; L = luaL_newstate(); luaL_openlibs(L); fp = fopen(logfile, "r"); if (errno) { fprintf(stderr, "Error opening file %s: %s\n", logfile, strerror(errno)); return EXIT_LOGFILE_HANDLING; } status = luaL_dofile(L, luafile); if (status) { fprintf(stderr, "Error reading LUA file %s: %s\n", luafile, lua_tostring(L, -1)); return EXIT_LUAFILE_HANDLING; } while ((read = getline(&line, &len, fp)) != -1) { trim(line); 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; } printf("%s\n", lua_tostring(L, -1)); lua_pop(L, 1); } if (errno) { fprintf(stderr, "Error readling file %s: %s\n", logfile, strerror(errno)); return EXIT_LOGFILE_HANDLING; } free(line); lua_close(L); fclose(fp); }