changeset 10442:d379e2c60766

(message_dolog): Ignore narrowing. Use low-level functions, to bypass modification and motion hooks.
author Karl Heuer <kwzh@gnu.org>
date Tue, 17 Jan 1995 02:29:16 +0000
parents f1fc7b6e5fa4
children 855923ce1e59
files src/xdisp.c
diffstat 1 files changed, 11 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Tue Jan 17 01:52:22 1995 +0000
+++ b/src/xdisp.c	Tue Jan 17 02:29:16 1995 +0000
@@ -212,7 +212,9 @@
    t means infinite.  nil means don't log at all.  */
 Lisp_Object Vmessage_log_max;
 
-/* Add a string to the message log, optionally terminated with a newline.  */
+/* Add a string to the message log, optionally terminated with a newline.
+   This function calls low-level routines in order to bypass text property
+   hooks, etc. which might not be safe to run.  */
 
 void
 message_dolog (m, len, nlflag)
@@ -229,6 +231,8 @@
       oldpoint = PT;
       oldbegv = BEGV;
       oldzv = ZV;
+      BEGV = BEG;
+      ZV = Z;
       if (oldpoint == Z)
 	oldpoint += len + nlflag;
       if (oldzv == Z)
@@ -240,13 +244,12 @@
 	insert_1 ("\n", 1, 1, 0);
       if (NATNUMP (Vmessage_log_max))
 	{
-	  Lisp_Object n;
-	  XSETINT (n, -XFASTINT (Vmessage_log_max));
-	  Fforward_line (n);
-	  oldpoint -= min (PT, oldpoint) - BEG;
-	  oldbegv -= min (PT, oldbegv) - BEG;
-	  oldzv -= min (PT, oldzv) - BEG;
-	  del_range (BEG, PT);
+	  int pos = scan_buffer ('\n', PT, 0,
+				 -XFASTINT (Vmessage_log_max) - 1, 0, 1);
+	  oldpoint -= min (pos, oldpoint) - BEG;
+	  oldbegv -= min (pos, oldbegv) - BEG;
+	  oldzv -= min (pos, oldzv) - BEG;
+	  del_range_1 (BEG, pos, 0);
 	}
       BEGV = oldbegv;
       ZV = oldzv;