diff --git a/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper b/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper index 0bce0609..29909ad1 100644 Binary files a/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper and b/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper differ diff --git a/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper.c b/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper.c index 21d247d3..7c94477b 100644 --- a/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper.c +++ b/game_eggs/steamcmd_servers/swords_'n_Magic_and_Stuff/wrapper.c @@ -8,7 +8,7 @@ #include #include -void print_latest_log(const char* log_directory) { +void print_latest_log(const char* log_directory, off_t* last_pos, off_t* last_size) { DIR *dir; struct dirent *entry; time_t latest_time = 0; @@ -39,45 +39,58 @@ void print_latest_log(const char* log_directory) { return; } - printf("\nLatest log file: %s\n", latest_file); - int fd = open(latest_file, O_RDONLY); if (fd < 0) { printf("Error opening file %s\n", latest_file); return; } - char buffer[4096]; - int bytes_read; - int last_line_printed = 0; // Flag to check whether we have printed the last line - do { - bytes_read = read(fd, buffer, sizeof(buffer)); - if (bytes_read > 0) { - // Check if the last character is a newline - if (buffer[bytes_read - 1] == '\n') { - fwrite(buffer, 1, bytes_read, stdout); - fflush(stdout); - } else { - // If the last character is not a newline, add one - char* temp = (char*) malloc(bytes_read + 1); - memcpy(temp, buffer, bytes_read); - temp[bytes_read] = '\n'; - fwrite(temp, 1, bytes_read + 1, stdout); - fflush(stdout); - free(temp); + // Get the size of the file + off_t size = lseek(fd, 0, SEEK_END); + + // Check if the file size has increased since the last read + if (size > *last_size) { + // Move the file pointer to the beginning of the file + lseek(fd, 0, SEEK_SET); + + char buffer[4096]; + int bytes_read; + int last_line_printed = 0; // Flag to check whether we have printed the last line + do { + bytes_read = read(fd, buffer, sizeof(buffer)); + if (bytes_read > 0) { + // Check if the last character is a newline + if (buffer[bytes_read - 1] == '\n') { + fwrite(buffer, 1, bytes_read, stdout); + fflush(stdout); + } else { + // If the last character is not a newline, add one + char* temp = (char*) malloc(bytes_read + 1); + memcpy(temp, buffer, bytes_read); + temp[bytes_read] = '\n'; + fwrite(temp, 1, bytes_read + 1, stdout); + fflush(stdout); + free(temp); + } + last_line_printed = (buffer[bytes_read - 1] == '\n'); } - last_line_printed = (buffer[bytes_read - 1] == '\n'); + } while (bytes_read > 0); + + // If the last line was not printed, print it now + if (!last_line_printed) { + printf("\n"); } - } while (bytes_read > 0); - // If the last line was not printed, print it now - if (!last_line_printed) { - printf("\n"); + // Remember the last position and size that was read + *last_pos = lseek(fd, 0, SEEK_CUR); + *last_size = size; } - close(fd); + } + + int main(int argc, char** argv) { if (argc < 2) { printf("Usage: winewrapper wine_path wine_args exe_path exe_args\n"); @@ -104,12 +117,15 @@ int main(int argc, char** argv) { sleep(30); + off_t last_pos = 0; + off_t last_size = 0; char* log_directory = "/home/container/SNM2020/Saved/Logs"; - print_latest_log(log_directory); + print_latest_log(log_directory, &last_pos, &last_size); + while (1) { sleep(1); - print_latest_log(log_directory); + print_latest_log(log_directory, &last_pos, &last_size); } kill(pid, SIGTERM);