]> git.eshelyaron.com Git - emacs.git/commitdiff
(Finsert_file_contents): Handle BEG and END non-nil
authorRichard M. Stallman <rms@gnu.org>
Mon, 16 Dec 1996 05:46:37 +0000 (05:46 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 16 Dec 1996 05:46:37 +0000 (05:46 +0000)
when REPLACE is non-nil.

src/fileio.c

index 20419fe394ab59edd1cb36d419a054d3a22e5a59..9b09b0e32c06c1573deaa8722b93bbccff2d3423 100644 (file)
@@ -3117,8 +3117,6 @@ and (2) it puts less data in the undo list.")
   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 @@ and (2) it puts less data in the undo list.")
       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 @@ and (2) it puts less data in the undo list.")
       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 @@ and (2) it puts less data in the undo list.")
          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 @@ and (2) it puts less data in the undo list.")
        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.  */