Mercurial > emacs
changeset 16695:7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
when REPLACE is non-nil.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 16 Dec 1996 05:46:37 +0000 |
parents | c19089a334b2 |
children | c39faead2472 |
files | src/fileio.c |
diffstat | 1 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c Mon Dec 16 02:44:52 1996 +0000 +++ b/src/fileio.c Mon Dec 16 05:46:37 1996 +0000 @@ -3117,8 +3117,6 @@ if (!NILP (replace)) { replace = Qnil; - XSETFASTINT (beg, 0); - XSETFASTINT (end, st.st_size); del_range_1 (BEGV, ZV, 0); } #else /* not DOS_NT */ @@ -3129,6 +3127,13 @@ int same_at_end = ZV; int overlap; + if (XINT (beg) != 0) + { + if (lseek (fd, XINT (beg), 0) < 0) + report_file_error ("Setting file position", + Fcons (filename, Qnil)); + } + immediate_quit = 1; QUIT; /* Count how many chars at the start of the file @@ -3155,7 +3160,7 @@ immediate_quit = 0; /* If the file matches the buffer completely, there's no need to replace anything. */ - if (same_at_start - BEGV == st.st_size) + if (same_at_start - BEGV == XINT (end)) { close (fd); specpdl_ptr--; @@ -3172,7 +3177,7 @@ int total_read, nread, bufpos, curpos, trial; /* At what file position are we now scanning? */ - curpos = st.st_size - (ZV - same_at_end); + curpos = XINT (end) - (ZV - same_at_end); /* If the entire file matches the buffer tail, stop the scan. */ if (curpos == 0) break; @@ -3216,8 +3221,8 @@ same_at_end += overlap; /* Arrange to read only the nonmatching middle part of the file. */ - XSETFASTINT (beg, same_at_start - BEGV); - XSETFASTINT (end, st.st_size - (ZV - same_at_end)); + XSETFASTINT (beg, XINT (beg) + (same_at_start - BEGV)); + XSETFASTINT (end, XINT (end) - (ZV - same_at_end)); del_range_1 (same_at_start, same_at_end, 0); /* Insert from the file at the proper position. */