* lisp/net/tramp-sh.el (tramp-awk-encode, tramp-awk-decode)
(tramp-awk-coding-test): New defconsts. (tramp-remote-coding-commands): Use them. (tramp-find-inline-encoding): Check for Perl only if necessary.
This commit is contained in:
parent
6dfbe9ffc2
commit
46709093be
1 changed files with 71 additions and 2 deletions
|
@ -873,6 +873,72 @@ Escape sequence %s is replaced with name of Perl binary.")
|
|||
"Perl program to use for decoding a file.
|
||||
Escape sequence %s is replaced with name of Perl binary.")
|
||||
|
||||
(defconst tramp-awk-encode
|
||||
"od -v -t x1 -A n | busybox awk '\\
|
||||
BEGIN {
|
||||
b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"
|
||||
b16 = \"0123456789abcdef\"
|
||||
}
|
||||
{
|
||||
for (c=1; c<=length($0); c++) {
|
||||
d=index(b16, substr($0,c,1))
|
||||
if (d--) {
|
||||
for (b=1; b<=4; b++) {
|
||||
o=o*2+int(d/8); d=(d*2)%%16
|
||||
if (++obc==6) {
|
||||
printf substr(b64,o+1,1)
|
||||
if (++rc>75) { printf \"\\n\"; rc=0 }
|
||||
obc=0; o=0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
END {
|
||||
if (obc) {
|
||||
tail=(obc==2) ? \"==\\n\" : \"=\\n\"
|
||||
while (obc++<6) { o=o*2 }
|
||||
printf \"%%c\", substr(b64,o+1,1)
|
||||
} else {
|
||||
tail=\"\\n\"
|
||||
}
|
||||
printf tail
|
||||
}'"
|
||||
"Awk program to use for encoding a file.
|
||||
This string is passed to `format', so percent characters need to be doubled.")
|
||||
|
||||
(defconst tramp-awk-decode
|
||||
"busybox awk '\\
|
||||
BEGIN {
|
||||
b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"
|
||||
}
|
||||
{
|
||||
for (i=1; i<=length($0); i++) {
|
||||
c=index(b64, substr($0,i,1))
|
||||
if(c--) {
|
||||
for(b=0; b<6; b++) {
|
||||
o=o*2+int(c/32); c=(c*2)%%64
|
||||
if(++obc==8) {
|
||||
if (o) {
|
||||
printf \"%%c\", o
|
||||
} else {
|
||||
system(\"dd if=/dev/zero bs=1 count=1 2>/dev/null\")
|
||||
}
|
||||
obc=0; o=0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}'"
|
||||
"Awk program to use for decoding a file.
|
||||
This string is passed to `format', so percent characters need to be doubled.")
|
||||
|
||||
(defconst tramp-awk-coding-test
|
||||
"test -c /dev/zero && \
|
||||
od -v -t x1 -A n </dev/null && \
|
||||
busybox awk '{}' </dev/null"
|
||||
"Test command for checking `tramp-awk-encode' and `tramp-awk-decode'.")
|
||||
|
||||
(defconst tramp-stat-marker "/////"
|
||||
"Marker in stat commands for file attributes.")
|
||||
|
||||
|
@ -4245,7 +4311,7 @@ and end of region, and are expected to replace the region contents
|
|||
with the encoded or decoded results, respectively.")
|
||||
|
||||
(defconst tramp-remote-coding-commands
|
||||
'((b64 "base64" "base64 -d -i")
|
||||
`((b64 "base64" "base64 -d -i")
|
||||
;; "-i" is more robust with older base64 from GNU coreutils.
|
||||
;; However, I don't know whether all base64 versions do supports
|
||||
;; this option.
|
||||
|
@ -4255,6 +4321,8 @@ with the encoded or decoded results, respectively.")
|
|||
(b64 "recode data..base64" "recode base64..data")
|
||||
(b64 tramp-perl-encode-with-module tramp-perl-decode-with-module)
|
||||
(b64 tramp-perl-encode tramp-perl-decode)
|
||||
;; This is painful slow, so we put it on the end.
|
||||
(b64 tramp-awk-encode tramp-awk-decode ,tramp-awk-coding-test)
|
||||
(uu "uuencode xxx" "uudecode -o /dev/stdout" "test -c /dev/stdout")
|
||||
(uu "uuencode xxx" "uudecode -o -")
|
||||
(uu "uuencode xxx" "uudecode -p")
|
||||
|
@ -4333,7 +4401,8 @@ Goes through the list `tramp-local-coding-commands' and
|
|||
(unless (tramp-send-command-and-check vec rem-test t)
|
||||
(throw 'wont-work-remote nil)))
|
||||
;; Check if remote perl exists when necessary.
|
||||
(when (and (not (stringp rem-enc))
|
||||
(when (and (symbolp rem-enc)
|
||||
(string-match "perl" (symbol-name rem-enc))
|
||||
(not (tramp-get-remote-perl vec)))
|
||||
(throw 'wont-work-remote nil))
|
||||
;; Check if remote encoding and decoding commands can be
|
||||
|
|
Loading…
Add table
Reference in a new issue