From 50a30ccec8932037b7f56122d723037cf8993147 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 16 Jul 2013 15:40:17 -0700 Subject: [PATCH] Fix w32 bug with call-process-region. * callproc.c (Fcall_process_region): Pass nil, not "/dev/null", to Fcall_process when the input is empty. This simplifies the code a bit. It makes no difference on POSIXish platforms but apparently it fixes a bug on w32. Fixes: debbugs:14885 --- src/ChangeLog | 8 +++++++- src/callproc.c | 10 ++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ab90682aa67..a70058ac690 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,6 +1,12 @@ 2013-07-16 Paul Eggert - Fix bug where Emacs tries to close a file twice (Bug#14839). + Fix w32 bug with call-process-region (Bug#14885). + * callproc.c (Fcall_process_region): Pass nil, not "/dev/null", + to Fcall_process when the input is empty. This simplifies the + code a bit. It makes no difference on POSIXish platforms but + apparently it fixes a bug on w32. + + Fix bug where insert-file-contents closes a file twice. (Bug#14839). * fileio.c (close_file_unwind): Don't close if FD is negative; this can happen when unwinding a zapped file descriptor. (Finsert_file_contents): Unwind-protect the fd before the point marker, diff --git a/src/callproc.c b/src/callproc.c index f2c8c0c6223..85ebf449e43 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -1093,7 +1093,7 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r (ptrdiff_t nargs, Lisp_Object *args) { struct gcpro gcpro1; - Lisp_Object filename_string; + Lisp_Object infile; ptrdiff_t count = SPECPDL_INDEX (); Lisp_Object start = args[0]; Lisp_Object end = args[1]; @@ -1111,10 +1111,8 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r empty_input = XINT (start) == XINT (end); } - filename_string = (empty_input - ? build_string (NULL_DEVICE) - : create_temp_file (nargs, args)); - GCPRO1 (filename_string); + infile = empty_input ? Qnil : create_temp_file (nargs, args); + GCPRO1 (infile); if (nargs > 3 && !NILP (args[3])) Fdelete_region (start, end); @@ -1129,7 +1127,7 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r args[0] = args[2]; nargs = 2; } - args[1] = filename_string; + args[1] = infile; RETURN_UNGCPRO (unbind_to (count, Fcall_process (nargs, args))); } -- 2.11.4.GIT