diff src/lread.c @ 76624:c8af69547c16

Include blockinput.h. (readchar, Fget_file_char): Add BLOCK_INPUT around getc. (unreadchar): Add BLOCK_INPUT around ungetc. (load_unwind): Add BLOCK_INPUT around fclose.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Tue, 20 Mar 2007 08:50:31 +0000
parents ee1bb0e6b772
children 846cbca78bc8 738ce3540ffb c0409ee15cee
line wrap: on
line diff
--- a/src/lread.c	Tue Mar 20 08:50:10 2007 +0000
+++ b/src/lread.c	Tue Mar 20 08:50:31 2007 +0000
@@ -36,6 +36,7 @@
 #include "keyboard.h"
 #include "termhooks.h"
 #include "coding.h"
+#include "blockinput.h"
 
 #ifdef lint
 #include <sys/inode.h>
@@ -324,14 +325,18 @@
 
   if (EQ (readcharfun, Qget_file_char))
     {
+      BLOCK_INPUT;
       c = getc (instream);
+      UNBLOCK_INPUT;
 #ifdef EINTR
       /* Interrupted reads have been observed while reading over the network */
       while (c == EOF && ferror (instream) && errno == EINTR)
 	{
 	  QUIT;
 	  clearerr (instream);
+	  BLOCK_INPUT;
 	  c = getc (instream);
+	  UNBLOCK_INPUT;
 	}
 #endif
       return c;
@@ -414,7 +419,11 @@
   else if (EQ (readcharfun, Qlambda))
     read_bytecode_char (1);
   else if (EQ (readcharfun, Qget_file_char))
-    ungetc (c, instream);
+    {
+      BLOCK_INPUT;
+      ungetc (c, instream);
+      UNBLOCK_INPUT;
+    }
   else
     call1 (readcharfun, make_number (c));
 }
@@ -625,7 +634,9 @@
      ()
 {
   register Lisp_Object val;
+  BLOCK_INPUT;
   XSETINT (val, getc (instream));
+  UNBLOCK_INPUT;
   return val;
 }
 
@@ -1044,7 +1055,11 @@
 {
   FILE *stream = (FILE *) XSAVE_VALUE (arg)->pointer;
   if (stream != NULL)
-    fclose (stream);
+    {
+      BLOCK_INPUT;
+      fclose (stream);
+      UNBLOCK_INPUT;
+    }
   if (--load_in_progress < 0) load_in_progress = 0;
   return Qnil;
 }