aboutsummaryrefslogtreecommitdiffstats
path: root/src/fileio.c
diff options
context:
space:
mode:
authorPaul Eggert2013-07-09 00:04:48 -0700
committerPaul Eggert2013-07-09 00:04:48 -0700
commit4ebbdd6712c1966406b40d2673464949775cbd7a (patch)
tree08667dd241629ca55c2c30ce19777bd7ec107cfa /src/fileio.c
parent584ee3fc72260acb3cc83f4d1a047b733a08ca17 (diff)
downloademacs-4ebbdd6712c1966406b40d2673464949775cbd7a.tar.gz
emacs-4ebbdd6712c1966406b40d2673464949775cbd7a.zip
Handle errno and exit status a bit more carefully.
* lib/ignore-value.h: Remove this gnulib-imported file. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * admin/merge-gnulib (GNULIB_MODULES): Remove ignore-value. * src/callproc.c (child_setup) [!DOS_NT]: Don't try to stuff an error number into an exit status. Instead, use EXIT_CANCELED. (child_setup) [!MSDOS]: Avoid possible deadlock with vfork. * src/callproc.c (relocate_fd): * src/emacs.c (close_output_streams, main): * src/process.c (create_process): * src/sysdep.c (sys_subshell) [!DOS_NT || !WINDOWSNT]: Use emacs_perror for simplicity. * src/callproc.c (relocate_fd, main): * src/sysdep.c (sys_subshell): Exit with EXIT_CANCELED etc., not 1, when exec setup fails. (shut_down_emacs): Use emacs_write, not write. * src/emacs.c, src/sysdep.c: Don't include <ignore-value.h>. * src/fileio.c (Fcopy_file, e_write): * src/nsterm.m (ns_select): * src/process.c (send_process): * src/sound.c (vox_write): Use emacs_write_sig, not emacs_write. * src/lisp.h (emacs_write_sig, emacs_perror): New decls. * src/process.h (EXIT_CANCELED), EXIT_CANNOT_INVOKE, EXIT_ENOENT): New constants. * src/sysdep.c (emacs_backtrace): Use emacs_write, not ignore_value of write. (emacs_full_write): New function. (emacs_write): Rewrite to use it. (emacswrite_sig, emacs_perror): New functions. * src/xrdb.c (fatal): Don't invoke perror, since errno might be garbage.
Diffstat (limited to 'src/fileio.c')
-rw-r--r--src/fileio.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/fileio.c b/src/fileio.c
index 89ae89e1613..d030c78c422 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2122,7 +2122,7 @@ entries (depending on how Emacs was built). */)
2122 immediate_quit = 1; 2122 immediate_quit = 1;
2123 QUIT; 2123 QUIT;
2124 while ((n = emacs_read (ifd, buf, sizeof buf)) > 0) 2124 while ((n = emacs_read (ifd, buf, sizeof buf)) > 0)
2125 if (emacs_write (ofd, buf, n) != n) 2125 if (emacs_write_sig (ofd, buf, n) != n)
2126 report_file_error ("I/O error", Fcons (newname, Qnil)); 2126 report_file_error ("I/O error", Fcons (newname, Qnil));
2127 immediate_quit = 0; 2127 immediate_quit = 0;
2128 2128
@@ -5317,12 +5317,10 @@ e_write (int desc, Lisp_Object string, ptrdiff_t start, ptrdiff_t end,
5317 5317
5318 if (coding->produced > 0) 5318 if (coding->produced > 0)
5319 { 5319 {
5320 coding->produced 5320 char *buf = (STRINGP (coding->dst_object)
5321 -= emacs_write (desc, 5321 ? SSDATA (coding->dst_object)
5322 STRINGP (coding->dst_object) 5322 : (char *) BYTE_POS_ADDR (coding->dst_pos_byte));
5323 ? SSDATA (coding->dst_object) 5323 coding->produced -= emacs_write_sig (desc, buf, coding->produced);
5324 : (char *) BYTE_POS_ADDR (coding->dst_pos_byte),
5325 coding->produced);
5326 5324
5327 if (coding->produced) 5325 if (coding->produced)
5328 return 0; 5326 return 0;