#include <unistd.h>
#include <fcntl.h>
#include <string.h>
+#include <time.h>
#include <sys/epoll.h>
#include <sys/types.h>
#include <sys/stat.h>
int i;
ret = read(infd, buf + *offset, bufsize - *offset - 1);
- if (read < 0) {
+ if (ret < 0) {
pr_err("read: %m\n");
return -1;
}
static int read_data(int infd, int outfd)
{
struct epoll_event ev;
+ time_t start_time = 0, cur_time;
int epoll_fd;
int ret;
char buf[256];
}
while (1) {
+ char str[320];
+ int len;
+
ret = epoll_wait(epoll_fd, &ev, 1, -1);
if (ret == 0)
continue;
if (ret == 0)
continue;
- if (outfd) {
- char newline = '\n';
- ret = write(outfd, buf, strlen(buf));
- if (read < 0) {
- pr_err("write: %m\n");
- break;
- }
- ret = write(outfd, &newline, 1);
- if (read < 0) {
- pr_err("write: %m\n");
- break;
- }
+ if (strlen(buf) < 5) {
+ pr_debug("discarding truncated log entry\n");
+ offset = 0;
+ continue;
}
+ if (!start_time)
+ start_time = time(NULL);
+
+ cur_time = time(NULL);
+
pr_info("%s\n", buf);
+
+ if (!outfd)
+ continue;
+
+ len = snprintf(str, sizeof(str),
+ "%ld;%s\n", cur_time - start_time, buf);
+
+ ret = write(outfd, str, len);
+ if (ret < 0) {
+ pr_err("write: %m\n");
+ break;
+ }
}
return 0;