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.  */