SCCS-vsn: usr.bin/tail/forward.c 5.6
{
register off_t size;
register char *p;
{
register off_t size;
register char *p;
if (!(size = sbp->st_size))
return;
if (!(size = sbp->st_size))
return;
+ if ((start = mmap(NULL,
size, PROT_READ, MAP_FILE, fileno(fp), (off_t)0)) == (caddr_t)-1) {
err(0, "%s", strerror(errno));
return;
}
/* Last char is special, ignore whether newline or not. */
size, PROT_READ, MAP_FILE, fileno(fp), (off_t)0)) == (caddr_t)-1) {
err(0, "%s", strerror(errno));
return;
}
/* Last char is special, ignore whether newline or not. */
- for (p += size - 1; --size;)
+ for (p = start + size - 1; --size;)
if (*--p == '\n' && !--off) {
++p;
break;
if (*--p == '\n' && !--off) {
++p;
break;
+ if (munmap(start, size)) {
+ err(0, "%s", strerror(errno));
+ return;
+ }