summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/callproc.c12
-rw-r--r--test/src/callproc-tests.el10
2 files changed, 21 insertions, 1 deletions
diff --git a/src/callproc.c b/src/callproc.c
index 8883415f3f5..65c858393a9 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1099,7 +1099,17 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r
}
if (nargs > 3 && !NILP (args[3]))
- Fdelete_region (start, end);
+ {
+ if (NILP (start))
+ {
+ /* No need to save restrictions since we delete everything
+ anyway. */
+ Fwiden ();
+ del_range (BEG, Z);
+ }
+ else
+ Fdelete_region (start, end);
+ }
if (nargs > 3)
{
diff --git a/test/src/callproc-tests.el b/test/src/callproc-tests.el
index bf7d47b27f1..1617d5e33d3 100644
--- a/test/src/callproc-tests.el
+++ b/test/src/callproc-tests.el
@@ -66,4 +66,14 @@
(error :got-error))))
(should have-called-debugger)))
+(ert-deftest call-process-region-entire-buffer-with-delete ()
+ "Check that Bug#40576 is fixed."
+ (let ((emacs (expand-file-name invocation-name invocation-directory)))
+ (skip-unless (file-executable-p emacs))
+ (with-temp-buffer
+ (insert "Buffer contents\n")
+ (should
+ (eq (call-process-region nil nil emacs :delete nil nil "--version") 0))
+ (should (eq (buffer-size) 0)))))
+
;;; callproc-tests.el ends here