emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 7caf570: Tramp code cleanup


From: Michael Albinus
Subject: master 7caf570: Tramp code cleanup
Date: Fri, 10 Jul 2020 04:45:23 -0400 (EDT)

branch: master
commit 7caf570662e41dd7cb90efaf8a335918cf1ac0da
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    Tramp code cleanup
    
    * lisp/net/tramp.el (tramp-shell-prompt-pattern)
    (tramp-wrong-passwd-regexp, tramp-method-regexp-alist)
    (tramp-domain-regexp, tramp-host-regexp, tramp-ipv6-regexp)
    (tramp-port-regexp, tramp-debug-outline-regexp)
    (tramp-drop-volume-letter, tramp-parse-shostkeys)
    (tramp-handle-file-name-case-insensitive-p):
    * lisp/net/tramp-adb.el (tramp-adb-send-command-and-check):
    * lisp/net/tramp-ftp.el (tramp-ftp-enable-ange-ftp):
    * lisp/net/tramp-gvfs.el (tramp-gvfs-monitor-process-filter):
    * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp)
    (tramp-device-escape-sequence-regexp):
    * lisp/net/tramp-smb.el (tramp-smb-do-file-attributes-with-stat)
    (tramp-smb-handle-set-file-acl, tramp-smb-read-file-entry):
    * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-file-selinux-context):
    Use character classes in regexp.
    
    * lisp/net/tramp-adb.el (tramp-adb-ls-date-year-regexp)
    (tramp-adb-ls-date-time-regexp): New defconst.
    (tramp-adb-ls-date-regexp, tramp-adb-ls-toolbox-regexp)
    (tramp-adb-sh-fix-ls-output): Use them.
    (tramp-adb-handle-set-file-times, tramp-adb-maybe-open-connection):
    Apply `eval-when-compile' on constant concat data.
    (tramp-do-parse-file-attributes-with-ls):
    Suppress `signal-hook-function'.
    (tramp-adb--gnu-switches-to-ash): Remove unused function.
    (tramp-adb-handle-set-file-modes): Qhote argument.
    (tramp-adb-maybe-open-connection): Set file property rather than flush.
    
    * lisp/net/tramp-cmds.el (tramp-rename-these-files):
    Apply `eval-when-compile' on constant concat data.
    
    * lisp/net/tramp-gvfs.el (tramp-gvfs-file-attributes)
    (tramp-gvfs-file-attributes-with-gvfs-ls-regexp): Embed them in
    `eval-and-compile'.
    (tramp-gvfs-get-directory-attributes): Apply `eval-when-compile'
    on constant concat data.
---
 lisp/net/tramp-adb.el      | 86 ++++++++++++++++++++++++++++------------------
 lisp/net/tramp-cmds.el     |  5 +--
 lisp/net/tramp-ftp.el      |  4 +--
 lisp/net/tramp-gvfs.el     | 67 +++++++++++++++++++-----------------
 lisp/net/tramp-sh.el       | 10 +++---
 lisp/net/tramp-smb.el      | 52 +++++++++++++++++++---------
 lisp/net/tramp-sudoedit.el |  4 +--
 lisp/net/tramp.el          | 36 +++++++++----------
 8 files changed, 154 insertions(+), 110 deletions(-)

diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index a7a5047..3c97efa 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -62,8 +62,21 @@ It is used for TCP/IP devices."
   :version "24.4"
   :group 'tramp)
 
+(eval-and-compile
+  (defconst tramp-adb-ls-date-year-regexp
+    "[[:digit:]]\\{4\\}-[[:digit:]]\\{2\\}-[[:digit:]]\\{2\\}"
+    "Regexp for date year format in ls output."))
+
+(eval-and-compile
+  (defconst tramp-adb-ls-date-time-regexp
+    "[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}"
+  "Regexp for date time format in ls output."))
+
 (defconst tramp-adb-ls-date-regexp
-  
"[[:space:]][0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9][[:space:]][0-9][0-9]:[0-9][0-9][[:space:]]"
+  (concat
+   "[[:space:]]" tramp-adb-ls-date-year-regexp
+   "[[:space:]]" tramp-adb-ls-date-time-regexp
+   "[[:space:]]")
   "Regexp for date format in ls output.")
 
 (defconst tramp-adb-ls-toolbox-regexp
@@ -73,7 +86,8 @@ It is used for TCP/IP devices."
    "[[:space:]]*\\([^[:space:]]+\\)"   ; \2 username
    "[[:space:]]+\\([^[:space:]]+\\)"   ; \3 group
    "[[:space:]]+\\([[:digit:]]+\\)"    ; \4 size
-   "[[:space:]]+\\([-[:digit:]]+[[:space:]][:[:digit:]]+\\)" ; \5 date
+   "[[:space:]]+\\(" tramp-adb-ls-date-year-regexp
+   "[[:space:]]" tramp-adb-ls-date-time-regexp "\\)" ; \5 date
    "[[:space:]]\\(.*\\)$")             ; \6 filename
   "Regexp for ls output.")
 
@@ -272,7 +286,9 @@ ARGUMENTS to pass to the OPERATION."
                 (if (eq id-format 'integer) 0 uid)
                 (if (eq id-format 'integer) 0 gid)
                 tramp-time-dont-know   ; atime
-                (date-to-time date)    ; mtime
+                ;; `date-to-time' checks `iso8601-parse', which might fail.
+                (let (signal-hook-function)
+                  (date-to-time date)) ; mtime
                 tramp-time-dont-know   ; ctime
                 size
                 mod-string
@@ -351,21 +367,6 @@ ARGUMENTS to pass to the OPERATION."
       "ls --color=never")
      (t "ls"))))
 
-(defun tramp-adb--gnu-switches-to-ash (switches)
-  "Almquist shell can't handle multiple arguments.
-Convert (\"-al\") to (\"-a\" \"-l\").  Remove arguments like \"--dired\"."
-  (split-string
-   (apply #'concat
-         (mapcar (lambda (s)
-                   (replace-regexp-in-string
-                    "\\(.\\)" " -\\1" (replace-regexp-in-string "^-" "" s)))
-                 ;; FIXME: Warning about removed switches (long and non-dash).
-                 (delq nil
-                       (mapcar
-                        (lambda (s)
-                          (and (not (string-match-p "\\(^--\\|^[^-]\\)" s)) s))
-                        switches))))))
-
 (defun tramp-adb-sh-fix-ls-output (&optional sort-by-time)
   "Insert dummy 0 in empty size columns.
 Android's \"ls\" command doesn't insert size column for directories:
@@ -375,10 +376,16 @@ Emacs dired can't find files."
     (goto-char (point-min))
     (while
        (search-forward-regexp
-        
"[[:space:]]\\([[:space:]][0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9][[:space:]]\\)" nil 
t)
+        (eval-when-compile
+          (concat
+           "[[:space:]]"
+           "\\([[:space:]]" tramp-adb-ls-date-year-regexp "[[:space:]]\\)"))
+        nil t)
       (replace-match "0\\1" "\\1" nil)
       ;; Insert missing "/".
-      (when (looking-at-p "[0-9][0-9]:[0-9][0-9][[:space:]]+$")
+      (when (looking-at-p
+            (eval-when-compile
+              (concat tramp-adb-ls-date-time-regexp "[[:space:]]+$")))
        (end-of-line)
        (insert "/")))
     ;; Sort entries.
@@ -577,7 +584,7 @@ But handle the case, if the \"test\" command is not 
available."
     (unless (and (eq flag 'nofollow) (file-symlink-p filename))
       (tramp-flush-file-properties v localname)
       (tramp-adb-send-command-and-check
-       v (format "chmod %o %s" mode localname)))))
+       v (format "chmod %o %s" mode (tramp-shell-quote-argument localname))))))
 
 (defun tramp-adb-handle-set-file-times (filename &optional time flag)
   "Like `set-file-times' for Tramp files."
@@ -595,15 +602,17 @@ But handle the case, if the \"test\" command is not 
available."
       ;; fails.  Also, fall back on old POSIX 'touch -t' if 'touch -d'
       ;; (introduced in POSIX.1-2008) fails.
       (tramp-adb-send-command-and-check
-       v (format (concat "touch -d %s %s %s 2>/dev/null || "
-                        "touch -d %s %s %s 2>/dev/null || "
-                        "touch -t %s %s %s")
-                (format-time-string "%Y-%m-%dT%H:%M:%S.%NZ" time t)
-                nofollow quoted-name
-                (format-time-string "%Y-%m-%dT%H:%M:%S" time t)
-                nofollow quoted-name
-                (format-time-string "%Y%m%d%H%M.%S" time t)
-                nofollow quoted-name)))))
+       v (format
+         (eval-when-compile
+           (concat "touch -d %s %s %s 2>/dev/null || "
+                   "touch -d %s %s %s 2>/dev/null || "
+                   "touch -t %s %s %s"))
+         (format-time-string "%Y-%m-%dT%H:%M:%S.%NZ" time t)
+         nofollow quoted-name
+         (format-time-string "%Y-%m-%dT%H:%M:%S" time t)
+         nofollow quoted-name
+         (format-time-string "%Y%m%d%H%M.%S" time t)
+         nofollow quoted-name)))))
 
 (defun tramp-adb-handle-copy-file
   (filename newname &optional ok-if-already-exists keep-date
@@ -1108,7 +1117,7 @@ the exit status."
           (format "%s; echo tramp_exit_status $?" command)
         "echo tramp_exit_status $?"))
   (with-current-buffer (tramp-get-connection-buffer vec)
-    (unless (tramp-search-regexp "tramp_exit_status [0-9]+")
+    (unless (tramp-search-regexp "tramp_exit_status [[:digit:]]+")
       (tramp-error
        vec 'file-error "Couldn't find exit status of `%s'" command))
     (skip-chars-forward "^ ")
@@ -1217,7 +1226,12 @@ connection if a previous connection has died for some 
reason."
            ;; connection properties.  We start again.
            (tramp-message vec 5 "Checking system information")
            (tramp-adb-send-command
-            vec "echo \\\"`getprop ro.product.model` `getprop 
ro.product.version` `getprop ro.build.version.release`\\\"")
+            vec
+            (eval-when-compile
+              (concat
+               "echo \\\"`getprop ro.product.model` "
+               "`getprop ro.product.version` "
+               "`getprop ro.build.version.release`\\\"")))
            (let ((old-getprop
                   (tramp-get-connection-property vec "getprop" nil))
                  (new-getprop
@@ -1241,7 +1255,8 @@ connection if a previous connection has died for some 
reason."
              (tramp-adb-send-command vec (format "su %s" user))
              (unless (tramp-adb-send-command-and-check vec nil)
                (delete-process p)
-               (tramp-flush-file-property vec "" "su-command-p")
+               ;; Do not flush, we need the nil value.
+               (tramp-set-file-property vec "" "su-command-p" nil)
                (tramp-error
                 vec 'file-error "Cannot switch to user `%s'" user)))
 
@@ -1275,4 +1290,9 @@ connection if a previous connection has died for some 
reason."
 
 (provide 'tramp-adb)
 
+;;; TODO:
+;;
+;; * Support file names with multibyte codepoints.  Use as fallback
+;;   "adb shell COMMAND".
+;;
 ;;; tramp-adb.el ends here
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 2805f66..0ca560a 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -448,8 +448,9 @@ For details, see `tramp-rename-files'."
         (tramp-user-error
          nil
          (substitute-command-keys
-          (concat "Current buffer is not remote.  "
-                  "Consider `\\[tramp-rename-files]' instead.")))
+          (eval-when-compile
+            (concat "Current buffer is not remote.  "
+                    "Consider `\\[tramp-rename-files]' instead."))))
        (setq target
             (when (null current-prefix-arg)
               ;; The source remote connection shall not trigger any action.
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index 95ae156..33d49aa 100644
--- a/lisp/net/tramp-ftp.el
+++ b/lisp/net/tramp-ftp.el
@@ -79,9 +79,9 @@ present for backward compatibility."
   ;;; This regexp recognizes absolute filenames with only one component
   ;;; on Windows, for the sake of hostname completion.
   (and (memq system-type '(ms-dos windows-nt))
-       (or (assoc "^[a-zA-Z]:/[^/:]*\\'" file-name-handler-alist)
+       (or (assoc "^[[:alpha:]]:/[^/:]*\\'" file-name-handler-alist)
           (setq file-name-handler-alist
-                (cons '("^[a-zA-Z]:/[^/:]*\\'" .
+                (cons '("^[:alpha:]]:/[^/:]*\\'" .
                         ange-ftp-completion-hook-function)
                       file-name-handler-alist)))))
 
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index dce6edd..4193faa 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -697,32 +697,34 @@ It has been changed in GVFS 1.14.")
   "List of cons cells, mapping \"gvfs-<command>\" to \"gio <command>\".")
 
 ;; <http://www.pygtk.org/docs/pygobject/gio-constants.html>
-(defconst tramp-gvfs-file-attributes
-  '("name"
-    "type"
-    "standard::display-name"
-    "standard::symlink-target"
-    "standard::is-volatile"
-    "unix::nlink"
-    "unix::uid"
-    "owner::user"
-    "unix::gid"
-    "owner::group"
-    "time::access"
-    "time::modified"
-    "time::changed"
-    "standard::size"
-    "unix::mode"
-    "access::can-read"
-    "access::can-write"
-    "access::can-execute"
-    "unix::inode"
-    "unix::device")
-  "GVFS file attributes.")
-
-(defconst tramp-gvfs-file-attributes-with-gvfs-ls-regexp
-  (concat "[[:blank:]]" (regexp-opt tramp-gvfs-file-attributes t) "=\\(.+?\\)")
-  "Regexp to parse GVFS file attributes with `gvfs-ls'.")
+(eval-and-compile
+  (defconst tramp-gvfs-file-attributes
+    '("name"
+      "type"
+      "standard::display-name"
+      "standard::symlink-target"
+      "standard::is-volatile"
+      "unix::nlink"
+      "unix::uid"
+      "owner::user"
+      "unix::gid"
+      "owner::group"
+      "time::access"
+      "time::modified"
+      "time::changed"
+      "standard::size"
+      "unix::mode"
+      "access::can-read"
+      "access::can-write"
+      "access::can-execute"
+      "unix::inode"
+      "unix::device")
+    "GVFS file attributes."))
+
+(eval-and-compile
+  (defconst tramp-gvfs-file-attributes-with-gvfs-ls-regexp
+    (concat "[[:blank:]]" (regexp-opt tramp-gvfs-file-attributes t) 
"=\\(.+?\\)")
+    "Regexp to parse GVFS file attributes with `gvfs-ls'."))
 
 (defconst tramp-gvfs-file-attributes-with-gvfs-info-regexp
   (concat "^[[:blank:]]*"
@@ -1181,10 +1183,11 @@ file names."
        (with-current-buffer (tramp-get-connection-buffer v)
          (goto-char (point-min))
          (while (looking-at
-                 (concat "^\\(.+\\)[[:blank:]]"
-                         "\\([[:digit:]]+\\)[[:blank:]]"
-                         "(\\(.+?\\))"
-                         tramp-gvfs-file-attributes-with-gvfs-ls-regexp))
+                 (eval-when-compile
+                   (concat "^\\(.+\\)[[:blank:]]"
+                           "\\([[:digit:]]+\\)[[:blank:]]"
+                           "(\\(.+?\\))"
+                           tramp-gvfs-file-attributes-with-gvfs-ls-regexp)))
            (let ((item (list (cons "type" (match-string 3))
                              (cons "standard::size" (match-string 2))
                              (cons "name" (match-string 1)))))
@@ -1475,11 +1478,11 @@ If FILE-SYSTEM is non-nil, return file system 
attributes."
        ;; File names are returned as URL paths.  We must convert them.
        (when (string-match ddu file)
          (setq file (replace-match dd nil nil file)))
-       (while (string-match-p "%\\([0-9A-F]\\{2\\}\\)" file)
+       (while (string-match-p "%\\([[:xdigit:]]\\{2\\}\\)" file)
          (setq file (url-unhex-string file)))
        (when (string-match ddu (or file1 ""))
          (setq file1 (replace-match dd nil nil file1)))
-       (while (string-match-p "%\\([0-9A-F]\\{2\\}\\)" (or file1 ""))
+       (while (string-match-p "%\\([[:xdigit:]]\\{2\\}\\)" (or file1 ""))
          (setq file1 (url-unhex-string file1)))
        ;; Remove watch when file or directory to be watched is deleted.
        (when (and (member action '(moved deleted))
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 89e5dc9..370244f 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -90,10 +90,10 @@ the default storage location, e.g. \"$HOME/.sh_history\"."
                  (string :tag "Redirect to a file")))
 
 ;;;###tramp-autoload
-(defconst tramp-display-escape-sequence-regexp "\e[[;0-9]+m"
+(defconst tramp-display-escape-sequence-regexp "\e[[:digit:];[]+m"
   "Terminal control escape sequences for display attributes.")
 
-(defconst tramp-device-escape-sequence-regexp "\e[[0-9]+n"
+(defconst tramp-device-escape-sequence-regexp "\e[[:digit:][]+n"
   "Terminal control escape sequences for device status.")
 
 ;; ksh on OpenBSD 4.5 requires that $PS1 contains a `#' character for
@@ -1515,8 +1515,8 @@ ID-FORMAT valid values are `string' and `integer'."
     (with-tramp-file-property v localname "file-selinux-context"
       (let ((context '(nil nil nil nil))
            (regexp (eval-when-compile
-                     (concat "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\):"
-                             "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\)"))))
+                     (concat "\\([[:alnum:]_]+\\):" "\\([[:alnum:]_]+\\):"
+                             "\\([[:alnum:]_]+\\):" "\\([[:alnum]_]+\\)"))))
        (when (and (tramp-remote-selinux-p v)
                   (tramp-send-command-and-check
                    v (format
@@ -5223,7 +5223,7 @@ the exit status."
           "echo tramp_exit_status $?"
           (if subshell " )" "")))
   (with-current-buffer (tramp-get-connection-buffer vec)
-    (unless (tramp-search-regexp "tramp_exit_status [0-9]+")
+    (unless (tramp-search-regexp "tramp_exit_status [[:digit:]]+")
       (tramp-error
        vec 'file-error "Couldn't find exit status of `%s'" command))
     (skip-chars-forward "^ ")
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 947e6a7..b120516 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -875,23 +875,34 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are 
completely ignored."
          (while (not (eobp))
            (cond
             ((looking-at
-              "Size:\\s-+\\([0-9]+\\)\\s-+Blocks:\\s-+[0-9]+\\s-+\\(\\w+\\)")
+              (eval-when-compile
+                (concat
+                 "Size:\\s-+\\([[:digit:]]+\\)\\s-+"
+                 "Blocks:\\s-+[[:digit:]]+\\s-+\\(\\w+\\)")))
              (setq size (string-to-number (match-string 1))
                    id (if (string-equal "directory" (match-string 2)) t
                         (if (string-equal "symbolic" (match-string 2)) ""))))
             ((looking-at
-              "Inode:\\s-+\\([0-9]+\\)\\s-+Links:\\s-+\\([0-9]+\\)")
+              
"Inode:\\s-+\\([[:digit:]]+\\)\\s-+Links:\\s-+\\([[:digit:]]+\\)")
              (setq inode (string-to-number (match-string 1))
                    link (string-to-number (match-string 2))))
             ((looking-at
-              
"Access:\\s-+([0-9]+/\\(\\S-+\\))\\s-+Uid:\\s-+\\([0-9]+\\)\\s-+Gid:\\s-+\\([0-9]+\\)")
+              (eval-when-compile
+                (concat
+                 "Access:\\s-+([[:digit:]]+/\\(\\S-+\\))\\s-+"
+                 "Uid:\\s-+\\([[:digit:]]+\\)\\s-+"
+                 "Gid:\\s-+\\([[:digit:]]+\\)")))
              (setq mode (match-string 1)
                    uid (if (equal id-format 'string) (match-string 2)
                          (string-to-number (match-string 2)))
                    gid (if (equal id-format 'string) (match-string 3)
                          (string-to-number (match-string 3)))))
             ((looking-at
-              
"Access:\\s-+\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)\\s-+\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)")
+              (eval-when-compile
+                (concat
+                 "Access:\\s-+"
+                 
"\\([[:digit:]]+\\)-\\([[:digit:]]+\\)-\\([[:digit:]]+\\)\\s-+"
+                 "\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)")))
              (setq atime
                    (encode-time
                     (string-to-number (match-string 6)) ;; sec
@@ -901,7 +912,11 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are 
completely ignored."
                     (string-to-number (match-string 2)) ;; month
                     (string-to-number (match-string 1))))) ;; year
             ((looking-at
-              
"Modify:\\s-+\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)\\s-+\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)")
+              (eval-when-compile
+                (concat
+                 "Modify:\\s-+"
+                 
"\\([[:digit:]]+\\)-\\([[:digit:]]+\\)-\\([[:digit:]]+\\)\\s-+"
+                 "\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)")))
              (setq mtime
                    (encode-time
                     (string-to-number (match-string 6)) ;; sec
@@ -911,7 +926,11 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are 
completely ignored."
                     (string-to-number (match-string 2)) ;; month
                     (string-to-number (match-string 1))))) ;; year
             ((looking-at
-              
"Change:\\s-+\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)\\s-+\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)")
+              (eval-when-compile
+                (concat
+                 "Change:\\s-+"
+                 
"\\([[:digit:]]+\\)-\\([[:digit:]]+\\)-\\([[:digit:]]+\\)\\s-+"
+                 "\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)")))
              (setq ctime
                    (encode-time
                     (string-to-number (match-string 6)) ;; sec
@@ -1474,7 +1493,7 @@ component is used as the target of the symlink."
                  ;; This is meant for traces, and returning from the
                  ;; function.  No error is propagated outside, due to
                  ;; the `ignore-errors' closure.
-                 (unless (tramp-search-regexp "tramp_exit_status [0-9]+")
+                 (unless (tramp-search-regexp "tramp_exit_status [[:digit:]]+")
                    (tramp-error
                     v 'file-error
                     "Couldn't find exit status of `%s'" tramp-smb-acl-program))
@@ -1719,21 +1738,21 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME 
YEAR)."
 ;; Entries provided by smbclient DIR aren't fully regular.
 ;; They should have the format
 ;;
-;; \s-\{2,2}                              - leading spaces
+;; \s-\{2,2\}                             - leading spaces
 ;; \S-\(.*\S-\)\s-*                       - file name, 30 chars, left bound
 ;; \s-+[ADHRSV]*                          - permissions, 7 chars, right bound
 ;; \s-                                    - space delimiter
-;; \s-+[0-9]+                             - size, 8 chars, right bound
+;; \s-+[[:digit:]]+                       - size, 8 chars, right bound
 ;; \s-\{2,2\}                             - space delimiter
 ;; \w\{3,3\}                              - weekday
 ;; \s-                                    - space delimiter
 ;; \w\{3,3\}                              - month
 ;; \s-                                    - space delimiter
-;; [ 12][0-9]                             - day
+;; [ 12][[:digit:]]                       - day
 ;; \s-                                    - space delimiter
-;; [0-9]\{2,2\}:[0-9]\{2,2\}:[0-9]\{2,2\} - time
+;; [[:digit:]]\{2,2\}:[[:digit:]]\{2,2\}:[[:digit:]]\{2,2\} - time
 ;; \s-                                    - space delimiter
-;; [0-9]\{4,4\}                           - year
+;; [[:digit:]]\{4,4\}                     - year
 ;;
 ;; samba/src/client.c (http://samba.org/doxygen/samba/client_8c-source.html)
 ;; has function display_finfo:
@@ -1781,13 +1800,14 @@ are listed.  Result is the list (LOCALNAME MODE SIZE 
MTIME)."
       (cl-block nil
 
        ;; year.
-       (if (string-match "\\([0-9]+\\)$" line)
+       (if (string-match "\\([[:digit:]]+\\)$" line)
            (setq year (string-to-number (match-string 1 line))
                  line (substring line 0 -5))
          (cl-return))
 
        ;; time.
-       (if (string-match "\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)$" line)
+       (if (string-match
+            "\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)$" line)
            (setq hour (string-to-number (match-string 1 line))
                  min  (string-to-number (match-string 2 line))
                  sec  (string-to-number (match-string 3 line))
@@ -1795,7 +1815,7 @@ are listed.  Result is the list (LOCALNAME MODE SIZE 
MTIME)."
          (cl-return))
 
        ;; day.
-       (if (string-match "\\([0-9]+\\)$" line)
+       (if (string-match "\\([[:digit:]]+\\)$" line)
            (setq day  (string-to-number (match-string 1 line))
                  line (substring line 0 -3))
          (cl-return))
@@ -1812,7 +1832,7 @@ are listed.  Result is the list (LOCALNAME MODE SIZE 
MTIME)."
          (cl-return))
 
        ;; size.
-       (if (string-match "\\([0-9]+\\)$" line)
+       (if (string-match "\\([[:digit:]]+\\)$" line)
            (let ((length (- (max 10 (1+ (length (match-string 1 line)))))))
              (setq size (string-to-number (match-string 1 line)))
              (when (string-match
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index 05242ff..29d419e 100644
--- a/lisp/net/tramp-sudoedit.el
+++ b/lisp/net/tramp-sudoedit.el
@@ -489,8 +489,8 @@ the result will be a local, non-Tramp, file name."
     (with-tramp-file-property v localname "file-selinux-context"
       (let ((context '(nil nil nil nil))
            (regexp (eval-when-compile
-                     (concat "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\):"
-                             "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\)"))))
+                     (concat "\\([[:alnum:]_]+\\):" "\\([[:alnum:]_]+\\):"
+                             "\\([[:alnum:]_]+\\):" "\\([[:alnum:]_]+\\)"))))
        (when (and (tramp-sudoedit-remote-selinux-p v)
                   (tramp-sudoedit-send-command
                    v "ls" "-d" "-Z"
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 1566162..1e7f2b5 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -560,7 +560,7 @@ Sometimes the prompt is reported to look like \"login 
as:\"."
   ;; Allow also [] style prompts.  They can appear only during
   ;; connection initialization; Tramp redefines the prompt afterwards.
   (concat "\\(?:^\\|\r\\)"
-         "[^]#$%>\n]*#?[]#$%>] *\\(\e\\[[0-9;]*[a-zA-Z] *\\)*")
+         "[^]#$%>\n]*#?[]#$%>] *\\(\e\\[[[:digit:];]*[[:alpha:]] *\\)*")
   "Regexp to match prompts from remote shell.
 Normally, Tramp expects you to configure `shell-prompt-pattern'
 correctly, but sometimes it happens that you are connecting to a
@@ -601,7 +601,7 @@ The `sudo' program appears to insert a `^@' character into 
the prompt."
          "\\|"
          "^.*\\("
          ;; Here comes a list of regexes, separated by \\|
-         "Received signal [0-9]+"
+         "Received signal [[:digit:]]+"
          "\\).*")
   "Regexp matching a `login failed' message.
 The regexp should match at end of buffer."
@@ -797,9 +797,9 @@ Used in `tramp-make-tramp-file-name'.")
 Should always start with \"^\". Derived from `tramp-prefix-format'.")
 
 (defconst tramp-method-regexp-alist
-  '((default    . "[a-zA-Z0-9-]+")
+  '((default    . "[[:alnum:]-]+")
     (simplified . "")
-    (separate   . "[a-zA-Z0-9-]*"))
+    (separate   . "[[:alnum:]-]*"))
   "Alist mapping Tramp syntax to regexps matching methods identifiers.")
 
 (defun tramp-build-method-regexp ()
@@ -843,7 +843,7 @@ Derived from `tramp-postfix-method-format'.")
   "Regexp matching delimiter between user and domain names.
 Derived from `tramp-prefix-domain-format'.")
 
-(defconst tramp-domain-regexp "[a-zA-Z0-9_.-]+"
+(defconst tramp-domain-regexp "[[:alnum:]_.-]+"
   "Regexp matching domain names.")
 
 (defconst tramp-user-with-domain-regexp
@@ -860,7 +860,7 @@ Used in `tramp-make-tramp-file-name'.")
   "Regexp matching delimiter between user and host names.
 Derived from `tramp-postfix-user-format'.")
 
-(defconst tramp-host-regexp "[a-zA-Z0-9_.%-]+"
+(defconst tramp-host-regexp "[[:alnum:]_.%-]+"
   "Regexp matching host names.")
 
 (defconst tramp-prefix-ipv6-format-alist
@@ -888,7 +888,7 @@ Derived from `tramp-prefix-ipv6-format'.")
 ;; The following regexp is a bit sloppy.  But it shall serve our
 ;; purposes.  It covers also IPv4 mapped IPv6 addresses, like in
 ;; "::ffff:192.168.0.1".
-(defconst tramp-ipv6-regexp "\\(?:[a-zA-Z0-9]*:\\)+[a-zA-Z0-9.]+"
+(defconst tramp-ipv6-regexp "\\(?:[[:alnum:]]*:\\)+[[:alnum:].]+"
   "Regexp matching IPv6 addresses.")
 
 (defconst tramp-postfix-ipv6-format-alist
@@ -920,7 +920,7 @@ Derived from `tramp-postfix-ipv6-format'.")
   "Regexp matching delimiter between host names and port numbers.
 Derived from `tramp-prefix-port-format'.")
 
-(defconst tramp-port-regexp "[0-9]+"
+(defconst tramp-port-regexp "[[:digit:]]+"
   "Regexp matching port numbers.")
 
 (defconst tramp-host-with-port-regexp
@@ -1684,11 +1684,10 @@ version, the function does nothing."
       (format "*debug tramp/%s %s*" method host-port))))
 
 (defconst tramp-debug-outline-regexp
-  (eval-when-compile
-    (concat
-     "[0-9]+:[0-9]+:[0-9]+\\.[0-9]+ " ;; Timestamp.
-     "\\(?:\\(#<thread .+>\\) \\)?"   ;; Thread.
-     "[a-z0-9-]+ (\\([0-9]+\\)) #"))  ;; Function name, verbosity.
+  (concat
+   "[[:digit:]]+:[[:digit:]]+:[[:digit:]]+\\.[[:digit:]]+ " ;; Timestamp.
+   "\\(?:\\(#<thread .+>\\) \\)?" ;; Thread.
+   "[[:alnum:]-]+ (\\([[:digit:]]+\\)) #") ;; Function name, verbosity.
   "Used for highlighting Tramp debug buffers in `outline-mode'.")
 
 (defconst tramp-debug-font-lock-keywords
@@ -2074,7 +2073,7 @@ letter into the file name.  This function removes it."
   (save-match-data
     (let ((quoted (tramp-compat-file-name-quoted-p name 'top))
          (result (tramp-compat-file-name-unquote name 'top)))
-      (setq result (if (string-match "\\`[a-zA-Z]:/" result)
+      (setq result (if (string-match "\\`[[:alpha:]]:/" result)
                     (replace-match "/" nil t result) result))
       (if quoted (tramp-compat-file-name-quote result 'top) result))))
 
@@ -2938,7 +2937,7 @@ User is always nil."
   "Return a list of (user host) tuples allowed to access.
 User is always nil."
   (tramp-parse-shostkeys-sknownhosts
-   dirname (concat "^key_[0-9]+_\\(" tramp-host-regexp "\\)\\.pub$")))
+   dirname (concat "^key_[[:digit:]]+_\\(" tramp-host-regexp "\\)\\.pub$")))
 
 (defun tramp-parse-sknownhosts (dirname)
   "Return a list of (user host) tuples allowed to access.
@@ -3255,12 +3254,13 @@ User is always nil."
                (let ((candidate
                       (tramp-compat-file-name-unquote
                        (directory-file-name filename)))
+                     case-fold-search
                      tmpfile)
                  ;; Check, whether we find an existing file with
                  ;; lower case letters.  This avoids us to create a
                  ;; temporary file.
                  (while (and (string-match-p
-                              "[a-z]" (tramp-file-local-name candidate))
+                              "[[:lower:]]" (tramp-file-local-name candidate))
                              (not (file-exists-p candidate)))
                    (setq candidate
                          (directory-file-name
@@ -3269,8 +3269,8 @@ User is always nil."
                  ;; for comparison.  `make-nearby-temp-file' is added
                  ;; to Emacs 26+ like `file-name-case-insensitive-p',
                  ;; so there is no compatibility problem calling it.
-                 (unless
-                     (string-match-p "[a-z]" (tramp-file-local-name candidate))
+                 (unless (string-match-p
+                          "[[:lower:]]" (tramp-file-local-name candidate))
                    (setq tmpfile
                          (let ((default-directory
                                  (file-name-directory filename)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]