Function: tramp-sh-get-signal-strings

tramp-sh-get-signal-strings is a byte-compiled function defined in tramp-sh.el.gz.

Signature

(tramp-sh-get-signal-strings VEC)

Documentation

Strings to return by process-file in case of signals.

Source Code

;; Defined in /usr/src/emacs/lisp/net/tramp-sh.el.gz
(defun tramp-sh-get-signal-strings (vec)
  "Strings to return by `process-file' in case of signals."
  (with-tramp-connection-property
      vec
      (concat
       "signal-strings-" (tramp-get-method-parameter vec 'tramp-remote-shell))
    (let ((default-directory (tramp-make-tramp-file-name vec 'noloc))
	  process-file-return-signal-string signals res result)
      (setq signals
	    (append
	     '(0) (split-string (shell-command-to-string "kill -l") nil 'omit)))
      ;; Sanity check.  Sometimes, the first entry is "0", although we
      ;; don't expect it.  Remove it.
      (when (and (stringp (cadr signals)) (string-equal "0" (cadr signals)))
	(setcdr signals (cddr signals)))
      ;; Sanity check.  "kill -l" shall have returned just the signal
      ;; names.  Some shells don't, like the one in "docker alpine".
      (let (signal-hook-function)
	(condition-case nil
	    (dolist (sig (cdr signals))
	      (unless (string-match-p (rx bol (+ (any "+-" alnum)) eol) sig)
		(error nil)))
	  (error (setq signals '(0)))))
      (dotimes (i 128)
	(push
	 (cond
	  ;; Some predefined values, which aren't reported sometimes,
	  ;; or would raise problems (all Stopped signals).
	  ((zerop i) 0)
	  ((string-equal (nth i signals) "HUP") "Hangup")
	  ((string-equal (nth i signals) "INT") "Interrupt")
	  ((string-equal (nth i signals) "QUIT") "Quit")
	  ((string-equal (nth i signals) "STOP") "Stopped (signal)")
	  ((string-equal (nth i signals) "TSTP") "Stopped")
	  ((string-equal (nth i signals) "TTIN") "Stopped (tty input)")
	  ((string-equal (nth i signals) "TTOU") "Stopped (tty output)")
	  (t (setq res
		   (if (null (nth i signals))
		       ""
		     (tramp-send-command
		      vec
		      (format
		       "%s %s %s"
		       (tramp-get-method-parameter vec 'tramp-remote-shell)
		       (mapconcat
			#'identity
			(tramp-get-method-parameter vec 'tramp-remote-shell-args)
			" ")
		       (tramp-shell-quote-argument (format "kill -%d $$" i))))
		     (with-current-buffer (tramp-get-connection-buffer vec)
		       (goto-char (point-min))
		       (buffer-substring (line-beginning-position)
					 (line-end-position)))))
	     (if (string-empty-p res)
		 (format "Signal %d" i)
	       res)))
	 result))
      ;; Due to Bug#41287, we cannot add this to the `dotimes' clause.
      (reverse result))))