summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--changelog9
-rw-r--r--inotail.c6
3 files changed, 14 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 34a6041..5e96f38 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
#
# Licensed under the terms of the GNU General Public License; version 2 or later.
-VERSION = 0.6-pre0
+VERSION = 0.6
# Paths
prefix = /usr/local
diff --git a/changelog b/changelog
index f25cc5e..83696c2 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,12 @@
+inotail 0.6
+
+ * Correctly handle tailing from pipes
+ * Do not try to seek on pipes when following (thanks Alexander Sulfrian)
+ * Handle file truncation in follow mode
+ * Various small fixes
+
+ -- Tobias Klauser <tklauser@distanz.ch> 2008-08-31 21:15
+
inotail 0.5
* Output verbose file headers correctly when used in a pipe
diff --git a/inotail.c b/inotail.c
index b61e30a..2fa7017 100644
--- a/inotail.c
+++ b/inotail.c
@@ -173,7 +173,7 @@ static off_t lines_to_offset_from_end(struct file_struct *f, unsigned long n_lin
if (buf[i] == '\n') {
if (--n_lines == 0) {
free(buf);
- return offset += i + 1; /* We don't want the first \n */
+ return offset + i + 1; /* We don't want the first \n */
}
}
}
@@ -263,6 +263,7 @@ static int tail_pipe_from_begin(struct file_struct *f, unsigned long n_units, co
while (n_units > 0) {
if ((bytes_read = read(f->fd, buf, BUFSIZ)) <= 0) {
+ /* Interrupted by a signal, retry reading */
if (bytes_read < 0 && (errno == EINTR || errno == EAGAIN))
continue;
else
@@ -283,6 +284,7 @@ static int tail_pipe_from_begin(struct file_struct *f, unsigned long n_units, co
}
}
+ /* Print remainder of the current block */
if (++i < block_size)
write(STDOUT_FILENO, &buf[i], bytes_read - i);
} else {
@@ -619,7 +621,7 @@ static int handle_inotify_event(struct inotify_event *inev, struct file_struct *
}
/* Seek to old file size */
- if ((ret = lseek(f->fd, f->size, SEEK_SET)) == (off_t) -1) {
+ if (!IS_PIPELIKE(finfo.st_mode) && (ret = lseek(f->fd, f->size, SEEK_SET)) == (off_t) -1) {
fprintf(stderr, "Error: Could not seek in file '%s' (%s)\n", f->name, strerror(errno));
goto ignore;
}