forward.c (c3fd5728c2e4ff027b6fe4cd58aea643713fb994) forward.c (44cf272f781c1703c921e2a0baacb048481e7cb9)
1/*-
2 * Copyright (c) 1991, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Edward Sze-Tyan Wang.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 191 unchanged lines hidden (view full) ---

200 register char *p;
201 char *start;
202
203 if (!(size = sbp->st_size))
204 return;
205
206 if (size > SIZE_T_MAX) {
207 errno = EFBIG;
1/*-
2 * Copyright (c) 1991, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Edward Sze-Tyan Wang.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 191 unchanged lines hidden (view full) ---

200 register char *p;
201 char *start;
202
203 if (!(size = sbp->st_size))
204 return;
205
206 if (size > SIZE_T_MAX) {
207 errno = EFBIG;
208 err(0, "%s", fname);
208 ierr();
209 return;
210 }
211
212 if ((start = mmap(NULL, (size_t)size,
213 PROT_READ, 0, fileno(fp), (off_t)0)) == (caddr_t)-1) {
209 return;
210 }
211
212 if ((start = mmap(NULL, (size_t)size,
213 PROT_READ, 0, fileno(fp), (off_t)0)) == (caddr_t)-1) {
214 err(0, "%s", fname);
214 ierr();
215 return;
216 }
217
218 /* Last char is special, ignore whether newline or not. */
219 for (p = start + size - 1; --size;)
220 if (*--p == '\n' && !--off) {
221 ++p;
222 break;
223 }
224
225 /* Set the file pointer to reflect the length displayed. */
226 size = sbp->st_size - size;
227 WR(p, size);
228 if (fseek(fp, (long)sbp->st_size, SEEK_SET) == -1) {
229 ierr();
230 return;
231 }
232 if (munmap(start, (size_t)sbp->st_size)) {
215 return;
216 }
217
218 /* Last char is special, ignore whether newline or not. */
219 for (p = start + size - 1; --size;)
220 if (*--p == '\n' && !--off) {
221 ++p;
222 break;
223 }
224
225 /* Set the file pointer to reflect the length displayed. */
226 size = sbp->st_size - size;
227 WR(p, size);
228 if (fseek(fp, (long)sbp->st_size, SEEK_SET) == -1) {
229 ierr();
230 return;
231 }
232 if (munmap(start, (size_t)sbp->st_size)) {
233 err(0, "%s", fname);
233 ierr();
234 return;
235 }
236}
234 return;
235 }
236}