]> git.eshelyaron.com Git - emacs.git/commitdiff
* fileio.c: Report proper errno when syscall falls.
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 18 Sep 2011 08:34:09 +0000 (01:34 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 18 Sep 2011 08:34:09 +0000 (01:34 -0700)
(Finsert_file_contents): Save and restore errno,
so that report_file_error outputs the correct diagnostic.
(Fwrite_region) [CLASH_DETECTION]: Likewise.

src/ChangeLog
src/fileio.c

index 835e70f99af25a67ff28e5df499be16677fe3cb3..282275ffa06110acec16f2b39a9c6acffb8ed887 100644 (file)
@@ -1,3 +1,10 @@
+2011-09-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * fileio.c: Report proper errno when syscall falls.
+       (Finsert_file_contents): Save and restore errno,
+       so that report_file_error outputs the correct diagnostic.
+       (Fwrite_region) [CLASH_DETECTION]: Likewise.
+
 2011-09-18  Eli Zaretskii  <eliz@gnu.org>
 
        * .gdbinit (pgx): Fix references to fields of `struct glyph'.
index 08be41f9fe46bd14f337c1be19483962fb1ca205..e335dcf027f009d233b71e2c38794002a07a494b 100644 (file)
@@ -3187,6 +3187,7 @@ variable `last-coding-system-used' to the coding system actually used.  */)
   Lisp_Object p;
   EMACS_INT total = 0;
   int not_regular = 0;
+  int save_errno = 0;
   char read_buf[READ_BUF_SIZE];
   struct coding_system coding;
   char buffer[1 << 14];
@@ -3250,6 +3251,7 @@ variable `last-coding-system-used' to the coding system actually used.  */)
 #endif /* WINDOWSNT */
     {
     badopen:
+      save_errno = errno;
       if (NILP (visit))
        report_file_error ("Opening input file", Fcons (orig_filename, Qnil));
       st.st_mtime = -1;
@@ -4281,6 +4283,7 @@ variable `last-coding-system-used' to the coding system actually used.  */)
       && current_buffer->modtime == -1)
     {
       /* If visiting nonexistent file, return nil.  */
+      errno = save_errno;
       report_file_error ("Opening input file", Fcons (orig_filename, Qnil));
     }
 
@@ -4618,7 +4621,9 @@ This calls `write-region-annotate-functions' at the start, and
       if (ret < 0)
        {
 #ifdef CLASH_DETECTION
+         save_errno = errno;
          if (!auto_saving) unlock_file (lockname);
+         errno = save_errno;
 #endif /* CLASH_DETECTION */
          UNGCPRO;
          report_file_error ("Lseek error", Fcons (filename, Qnil));