# HG changeset patch # User Richard M. Stallman # Date 850715197 0 # Node ID 7df45948d2d8e5dca28ff827979c6d4583bc19e0 # Parent c19089a334b2b5263e9683810943725c47a80e5d (Finsert_file_contents): Handle BEG and END non-nil when REPLACE is non-nil. diff -r c19089a334b2 -r 7df45948d2d8 src/fileio.c --- 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. */