version 1.18, 2004/02/16 19:48:21 |
version 1.19, 2004/03/01 16:35:05 |
|
|
ke.ident = fileno(fp); |
ke.ident = fileno(fp); |
ke.flags = EV_ENABLE|EV_ADD|EV_CLEAR; |
ke.flags = EV_ENABLE|EV_ADD|EV_CLEAR; |
ke.filter = EVFILT_VNODE; |
ke.filter = EVFILT_VNODE; |
ke.fflags = NOTE_DELETE | NOTE_RENAME; |
ke.fflags = NOTE_DELETE | NOTE_RENAME | NOTE_TRUNCATE; |
if (kevent(kq, &ke, 1, NULL, 0, NULL) < 0) { |
if (kevent(kq, &ke, 1, NULL, 0, NULL) < 0) { |
close(kq); |
close(kq); |
kq = -1; |
kq = -1; |
|
|
sleep(1); |
sleep(1); |
} else if (ke.filter == EVFILT_READ) { |
} else if (ke.filter == EVFILT_READ) { |
continue; |
continue; |
} else { |
} else if ((ke.fflags & NOTE_TRUNCATE) == 0) { |
/* |
/* |
* File was renamed or deleted. |
* File was renamed or deleted. |
* |
* |
|
|
} |
} |
(void)memcpy(sbp, &nsb, sizeof(nsb)); |
(void)memcpy(sbp, &nsb, sizeof(nsb)); |
goto kq_retry; |
goto kq_retry; |
} else if (nsb.st_size < sbp->st_size) { |
} else if (ke.fflags & NOTE_TRUNCATE) { |
warnx("%s has been truncated, resetting.", fname); |
warnx("%s has been truncated, resetting.", fname); |
|
fpurge(fp); |
rewind(fp); |
rewind(fp); |
(void)memcpy(sbp, &nsb, sizeof(nsb)); |
|
} |
} |
|
(void)memcpy(sbp, &nsb, sizeof(nsb)); |
} |
} |
if (kq >= 0) |
if (kq >= 0) |
close(kq); |
close(kq); |