]> code.delx.au - gnu-emacs/blobdiff - src/doc.c
Another fix for Cygwin.
[gnu-emacs] / src / doc.c
index 009616f4f87aad928a493518c787a082840c02b4..b6f1569c2d830c87a97df60c42b4b422ec9a504c 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -850,6 +850,7 @@ Otherwise, return a new string, without any text properties.  */)
          /* This is for computing the SHADOWS arg for describe_map_tree.  */
          Lisp_Object active_maps = Fcurrent_active_maps (Qnil, Qnil);
          Lisp_Object earlier_maps;
+         ptrdiff_t count = SPECPDL_INDEX ();
 
          changed = 1;
          strp += 2;            /* skip \{ or \< */
@@ -886,6 +887,10 @@ Otherwise, return a new string, without any text properties.  */)
          /* Now switch to a temp buffer.  */
          oldbuf = current_buffer;
          set_buffer_internal (XBUFFER (Vprin1_to_string_buffer));
+         /* This is for an unusual case where some after-change
+            function uses 'format' or 'prin1' or something else that
+            will thrash Vprin1_to_string_buffer we are using.  */
+         specbind (Qinhibit_modification_hooks, Qt);
 
          if (NILP (tem))
            {
@@ -905,11 +910,12 @@ Otherwise, return a new string, without any text properties.  */)
                 If this one's not active, get nil.  */
              earlier_maps = Fcdr (Fmemq (tem, Freverse (active_maps)));
              describe_map_tree (tem, 1, Fnreverse (earlier_maps),
-                                Qnil, (char *)0, 1, 0, 0, 1);
+                                Qnil, 0, 1, 0, 0, 1);
            }
          tem = Fbuffer_string ();
          Ferase_buffer ();
          set_buffer_internal (oldbuf);
+         unbind_to (count, Qnil);
 
        subst_string:
          start = SDATA (tem);