]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix Tramp's make-process on macOS
authorMichael Albinus <michael.albinus@gmx.de>
Thu, 23 Sep 2021 12:29:28 +0000 (14:29 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Thu, 23 Sep 2021 12:29:28 +0000 (14:29 +0200)
* lisp/net/tramp-sh.el (tramp-get-remote-mknod-or-mkfifo): New defun.
(tramp-sh-handle-make-process): Use it.  (Bug#50748)

lisp/net/tramp-sh.el

index 18599f7c39c2c3f250baec7b7374b26d171f4b66..7f1a52fa934cf8f820aba1841acc07485937c842 100644 (file)
@@ -2883,10 +2883,14 @@ implementation will be used."
 
            ;; Handle error buffer.
            (when (bufferp stderr)
+             (unless (tramp-get-remote-mknod-or-mkfifo v)
+               (tramp-error
+                v 'file-error "Stderr buffer `%s' not supported" stderr))
              (with-current-buffer stderr
                (setq buffer-read-only nil))
              ;; Create named pipe.
-             (tramp-send-command v (format "mknod %s p" tmpstderr))
+             (tramp-send-command
+              v (format (tramp-get-remote-mknod-or-mkfifo v) tmpstderr))
              ;; Create stderr process.
              (make-process
               :name (buffer-name stderr)
@@ -2963,7 +2967,7 @@ implementation will be used."
                        (ignore-errors
                          (set-process-query-on-exit-flag p (null noquery))
                          (set-marker (process-mark p) (point)))
-                       ;; Kill stderr process delete and named pipe.
+                       ;; Kill stderr process and delete named pipe.
                        (when (bufferp stderr)
                          (add-function
                           :after (process-sentinel p)
@@ -5796,6 +5800,23 @@ This command is returned only if `delete-by-moving-to-trash' is non-nil."
            (tramp-file-local-name tmpfile) (tramp-file-local-name tmpfile)))
        (delete-file tmpfile)))))
 
+(defun tramp-get-remote-mknod-or-mkfifo (vec)
+  "Determine remote `mknod' or `mkfifo' command."
+  (with-tramp-connection-property vec "mknod-or-mkfifo"
+    (tramp-message vec 5 "Finding a suitable `mknod' or `mkfifo' command")
+    (let ((tmpfile (tramp-make-tramp-temp-name vec))
+         command)
+      (prog1
+         (or (and (setq command "mknod %s p")
+                  (tramp-send-command-and-check
+                   vec (format command (tramp-file-local-name tmpfile)))
+                  command)
+             (and (setq command "mkfifo %s")
+                  (tramp-send-command-and-check
+                   vec (format command (tramp-file-local-name tmpfile)))
+                  command))
+       (delete-file tmpfile)))))
+
 ;; Some predefined connection properties.
 (defun tramp-get-inline-compress (vec prop size)
   "Return the compress command related to PROP.