summaryrefslogtreecommitdiffstats
path: root/src/vfs/shell/helpers
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:11:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:11:49 +0000
commit1b88cd5ee8510e90e69f885bfd730ce57621781c (patch)
treeb6b33bd695258f68c68824029c279d660ee4b85e /src/vfs/shell/helpers
parentAdding upstream version 3:4.8.30. (diff)
downloadmc-upstream.tar.xz
mc-upstream.zip
Adding upstream version 3:4.8.31.upstream/3%4.8.31upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--src/vfs/shell/helpers/Makefile.am10
-rw-r--r--src/vfs/shell/helpers/Makefile.in (renamed from src/vfs/fish/helpers/Makefile.in)60
-rw-r--r--src/vfs/shell/helpers/README.shell227
-rw-r--r--src/vfs/shell/helpers/append15
-rw-r--r--src/vfs/shell/helpers/chmod5
-rw-r--r--src/vfs/shell/helpers/chown5
-rw-r--r--src/vfs/shell/helpers/fexists2
-rw-r--r--src/vfs/shell/helpers/get (renamed from src/vfs/fish/helpers/get)17
-rw-r--r--src/vfs/shell/helpers/hardlink (renamed from src/vfs/fish/helpers/hardlink)5
-rw-r--r--src/vfs/shell/helpers/info (renamed from src/vfs/fish/helpers/info)14
-rw-r--r--src/vfs/shell/helpers/ln (renamed from src/vfs/fish/helpers/ln)5
-rw-r--r--src/vfs/shell/helpers/ls (renamed from src/vfs/fish/helpers/ls)58
-rw-r--r--src/vfs/shell/helpers/mkdir5
-rw-r--r--src/vfs/shell/helpers/mv5
-rw-r--r--src/vfs/shell/helpers/rmdir5
-rw-r--r--src/vfs/shell/helpers/send16
-rw-r--r--src/vfs/shell/helpers/unlink5
-rw-r--r--src/vfs/shell/helpers/utime12
18 files changed, 389 insertions, 82 deletions
diff --git a/src/vfs/shell/helpers/Makefile.am b/src/vfs/shell/helpers/Makefile.am
new file mode 100644
index 0000000..aa0db25
--- /dev/null
+++ b/src/vfs/shell/helpers/Makefile.am
@@ -0,0 +1,10 @@
+shelldir = $(libexecdir)/@PACKAGE@/shell
+
+# Files to install and distribute other than shell scripts
+SHELL_MISC = README.shell
+
+# Install and distribute SHELL helper scripts w/o shebang & executable bit as data
+shell_DATA = $(SHELL_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime
+shellconfdir = $(sysconfdir)/@PACKAGE@
+
+EXTRA_DIST = $(shell_DATA)
diff --git a/src/vfs/fish/helpers/Makefile.in b/src/vfs/shell/helpers/Makefile.in
index c17efbb..cef7b97 100644
--- a/src/vfs/fish/helpers/Makefile.in
+++ b/src/vfs/shell/helpers/Makefile.in
@@ -88,7 +88,7 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = src/vfs/fish/helpers
+subdir = src/vfs/shell/helpers
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -134,7 +134,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
$(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
$(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
- $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-shell.m4 \
$(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
$(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
$(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
@@ -196,8 +196,8 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(fishdir)"
-DATA = $(fish_DATA)
+am__installdirs = "$(DESTDIR)$(shelldir)"
+DATA = $(shell_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -410,15 +410,15 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-fishdir = $(libexecdir)/@PACKAGE@/fish
+shelldir = $(libexecdir)/@PACKAGE@/shell
-# Files to install and distribute other than fish scripts
-FISH_MISC = README.fish
+# Files to install and distribute other than shell scripts
+SHELL_MISC = README.shell
-# Install and distribute FISH helper scripts w/o shebang & executable bit as data
-fish_DATA = $(FISH_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime
-fishconfdir = $(sysconfdir)/@PACKAGE@
-EXTRA_DIST = $(fish_DATA)
+# Install and distribute SHELL helper scripts w/o shebang & executable bit as data
+shell_DATA = $(SHELL_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime
+shellconfdir = $(sysconfdir)/@PACKAGE@
+EXTRA_DIST = $(shell_DATA)
all: all-am
.SUFFIXES:
@@ -431,9 +431,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/fish/helpers/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/shell/helpers/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/vfs/fish/helpers/Makefile
+ $(AUTOMAKE) --gnu src/vfs/shell/helpers/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -457,27 +457,27 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-install-fishDATA: $(fish_DATA)
+install-shellDATA: $(shell_DATA)
@$(NORMAL_INSTALL)
- @list='$(fish_DATA)'; test -n "$(fishdir)" || list=; \
+ @list='$(shell_DATA)'; test -n "$(shelldir)" || list=; \
if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(fishdir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(fishdir)" || exit 1; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(shelldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(shelldir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fishdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(fishdir)" || exit $$?; \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelldir)" || exit $$?; \
done
-uninstall-fishDATA:
+uninstall-shellDATA:
@$(NORMAL_UNINSTALL)
- @list='$(fish_DATA)'; test -n "$(fishdir)" || list=; \
+ @list='$(shell_DATA)'; test -n "$(shelldir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- dir='$(DESTDIR)$(fishdir)'; $(am__uninstall_files_from_dir)
+ dir='$(DESTDIR)$(shelldir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
@@ -521,7 +521,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
- for dir in "$(DESTDIR)$(fishdir)"; do \
+ for dir in "$(DESTDIR)$(shelldir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -574,7 +574,7 @@ info: info-am
info-am:
-install-data-am: install-fishDATA
+install-data-am: install-shellDATA
install-dvi: install-dvi-am
@@ -618,7 +618,7 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-fishDATA
+uninstall-am: uninstall-shellDATA
.MAKE: install-am install-strip
@@ -626,13 +626,13 @@ uninstall-am: uninstall-fishDATA
cscopelist-am ctags-am distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-fishDATA \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-shellDATA install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am tags-am uninstall uninstall-am uninstall-fishDATA
+ ps ps-am tags-am uninstall uninstall-am uninstall-shellDATA
.PRECIOUS: Makefile
diff --git a/src/vfs/shell/helpers/README.shell b/src/vfs/shell/helpers/README.shell
new file mode 100644
index 0000000..8cc5347
--- /dev/null
+++ b/src/vfs/shell/helpers/README.shell
@@ -0,0 +1,227 @@
+
+ FIles transferred over SSH
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This protocol was designed for transferring files over a remote shell
+connection (rsh and compatibles). It can be as well used for transfers over
+rsh, and there may be other uses.
+
+Since version 4.8.31 Midnight Commander doesn't support FISH commands with form
+
+#FISH_COMMAND [arg1] [arg2] ... [argN]
+
+and sends requests as shell scripts only.
+
+First, MC looks for system-wide set of scripts, then it checks whether
+current user has host-specific overrides in his per-user MC configuration
+directory. User-defined overrides take priority over sytem-wide scripts
+if they exist. The order in which the directories are traversed is as follows:
+
+ /usr/libexec/mc/shell
+ ~/.local/share/mc/shell/<hostname>/
+
+Server's reply is multiline, but always ends with
+
+### 000<optional text>
+
+line. ### is prefix to mark this line, 000 is return code. Return
+codes are superset to those used in ftp.
+
+There are few new exit codes defined:
+
+000 don't know; if there were no previous lines, this marks COMPLETE
+success, if they were, it marks failure.
+
+001 don't know; if there were no previous lines, this marks
+PRELIMinary success, if they were, it marks failure
+
+ Connecting
+ ~~~~~~~~~~
+MC uses "echo SHELL:;/bin/sh" as command executed on remote machine.
+
+ Actions
+ ~~~~~~~
+
+Get info about host into $result
+
+ echo $result
+ echo '### 200'
+
+Script: info
+
+--------------------------------------------------------------------------------
+
+List directory or get status information about single file.
+
+ ls -lLa $1 | grep '^[^cbt]' | ( while read p x u g s m d y n; do echo "P$p $u.$g
+ S$s
+ d$m $d $y
+ :$n
+ "; done )
+ ls -lLa $1 | grep '^[cb]' | ( while read p x u g a i m d y n; do echo "P$p $u.$g
+ E$a$i
+ dD$m $d $y
+ :$n
+ "; done )
+ echo '### 200'
+
+Output is in following form (any line except :<filename> may be omitted):
+
+P<unix permissions> <owner>.<group>
+S<size>
+d<3-letters month name> <day> <year or HH:MM>
+D<year> <month> <day> <hour> <minute> <second>[.1234]
+E<major-of-device>,<minor>
+:<filename>
+L<filename symlink points to>
+<blank line to separate items>
+
+Unix permissions are of form X---------
+where X is type of file:
+ '-' a regular file
+ 'd' a directory
+ 'c' a character device
+ 'b' a block device
+ 'l' a symbolic link
+ 'p' a FIFO
+ 's' a socket.
+
+'d' has three fields:
+ month (one of strings Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
+ day of month
+ single number indicating year, or HH:MM field (assume current year in such
+ case). As you've probably noticed, this is pretty broken; it is for
+ compatibility with ls listing.
+
+Script: ls
+
+--------------------------------------------------------------------------------
+
+Get file
+
+ ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'
+
+Server sends line with filesize on it, followed by line with ### 100
+indicating partial success, then it sends binary data (exactly filesize bytes)
+and follows them with (with no preceding newline) ### 200.
+
+Note that there's no way to abort running RETR command - except closing
+the connection.
+
+Script: get
+
+--------------------------------------------------------------------------------
+
+Put file
+
+ > /file/name; echo '### 001'; ( dd bs=4096 count=<size/4096>; dd bs=<size%4096> count=1 ) 2>/dev/null | ( cat > %s; cat > /dev/null ); echo '### 200'
+
+This command is for storing /file/name, which is exactly size bytes big.
+You probably think I went crazy. Well, I did not: that strange cat > /dev/null
+has purpose to discard any extra data which was not written to disk (due to for
+example out of space condition).
+
+[Why? Imagine uploading file with "rm -rf /" line in it.]
+
+Script: send
+
+--------------------------------------------------------------------------------
+
+Change directory
+
+ cd /somewhere; echo '### 000'
+
+It is specified here, but I'm not sure how wise idea is to use this one:
+it breaks stateless-ness of the protocol.
+
+--------------------------------------------------------------------------------
+
+Change mode
+
+ chmod 1234 file; echo '### 000'
+
+Script: chmod
+
+--------------------------------------------------------------------------------
+
+Change own
+
+ chown user /file/name; echo '### 000'
+
+Script: chown
+
+--------------------------------------------------------------------------------
+
+Remove file
+
+ rm -f /some/path; echo '### 000'
+
+Sctipt: unlink
+
+--------------------------------------------------------------------------------
+
+Make directory:
+
+ mkdir /some/path; echo '### 000'
+
+Script: mkdir
+
+--------------------------------------------------------------------------------
+
+Remove directory
+
+ rmdir /some/path; echo '### 000'
+
+Script: rmdir
+
+--------------------------------------------------------------------------------
+
+Rename/move file
+
+ mv /path/a /path/b; echo '### 000'
+
+Script: mv
+
+--------------------------------------------------------------------------------
+
+Make link
+
+ ln /path/a /path/b; echo '### 000'
+
+Script: hardlink
+
+--------------------------------------------------------------------------------
+
+Make symbolic link:
+
+ ln -s /path/a /path/b; echo '### 000'
+
+Script: ln
+
+--------------------------------------------------------------------------------
+
+You can use following parameters:
+SHELL_FILESIZE
+SHELL_FILENAME
+SHELL_FILEMODE
+SHELL_FILEOWNER
+SHELL_FILEGROUPE
+SHELL_FILEFROM
+SHELL_FILETO
+
+NB:
+'SHELL_FILESIZE' is used if we operate with single file name in 'unlink', 'rmdir', 'chmod', etc...
+'SHELL_FILEFROM','SHELL_FILETO' are used if we operate with two files in 'ln', 'hardlink', 'mv' etc...
+'SHELL_FILEOWNER', 'SHELL_FILEGROUPE' are a new user/group in chown
+
+and flags:
+SHELL_HAVE_HEAD
+SHELL_HAVE_SED
+SHELL_HAVE_AWK
+SHELL_HAVE_PERL
+SHELL_HAVE_LSQ
+SHELL_HAVE_DATE_MDYT
+
+That's all, folks!
+ pavel@ucw.cz
+ aborodin@vmail.ru
diff --git a/src/vfs/shell/helpers/append b/src/vfs/shell/helpers/append
new file mode 100644
index 0000000..a73d2cd
--- /dev/null
+++ b/src/vfs/shell/helpers/append
@@ -0,0 +1,15 @@
+FILENAME="/${SHELL_FILENAME}"
+echo "### 001"
+{
+ bss=4096
+ bsl=4095
+ if [ $SHELL_FILESIZE -lt $bss ]; then
+ bss=1;
+ bsl=0;
+ fi
+ while [ $SHELL_FILESIZE -gt 0 ]; do
+ cnt=`expr \\( $SHELL_FILESIZE + $bsl \\) / $bss`
+ n=`dd bs=$bss count=$cnt | tee -a "${FILENAME}" | wc -c`
+ SHELL_FILESIZE=`expr $SHELL_FILESIZE - $n`
+ done
+}; echo "### 200"
diff --git a/src/vfs/shell/helpers/chmod b/src/vfs/shell/helpers/chmod
new file mode 100644
index 0000000..75ea024
--- /dev/null
+++ b/src/vfs/shell/helpers/chmod
@@ -0,0 +1,5 @@
+if chmod ${SHELL_FILEMODE} "/${SHELL_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/shell/helpers/chown b/src/vfs/shell/helpers/chown
new file mode 100644
index 0000000..c2fc2b1
--- /dev/null
+++ b/src/vfs/shell/helpers/chown
@@ -0,0 +1,5 @@
+if chown ${SHELL_FILEOWNER}:${SHELL_FILEGROUP} "/${SHELL_FILENAME}" ; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/shell/helpers/fexists b/src/vfs/shell/helpers/fexists
new file mode 100644
index 0000000..3d11574
--- /dev/null
+++ b/src/vfs/shell/helpers/fexists
@@ -0,0 +1,2 @@
+ls -l "/${SHELL_FILENAME}" >/dev/null 2>/dev/null
+echo '### '$?
diff --git a/src/vfs/fish/helpers/get b/src/vfs/shell/helpers/get
index 762267a..b633a45 100644
--- a/src/vfs/fish/helpers/get
+++ b/src/vfs/shell/helpers/get
@@ -1,7 +1,6 @@
-#RETR $FISH_FILENAME $FISH_START_OFFSET
LC_TIME=C
export LC_TIME
-fish_get_perl ()
+shell_get_perl ()
{
FILENAME=$1
OFFSET=$2
@@ -35,7 +34,7 @@ exit 0
' "${FILENAME}" $OFFSET
}
-fish_get_tail ()
+shell_get_tail ()
{
FILENAME=$1
OFFSET=$2
@@ -67,7 +66,7 @@ else
fi
}
-fish_get_dd ()
+shell_get_dd ()
{
FILENAME=$1
OFFSET=$2
@@ -96,10 +95,10 @@ else
fi
}
-if [ -n "${FISH_HAVE_PERL}" ]; then
- fish_get_perl "/${FISH_FILENAME}" ${FISH_START_OFFSET}
-elif [ -n "${FISH_HAVE_TAIL}" ]; then
- fish_get_tail "/${FISH_FILENAME}" ${FISH_START_OFFSET}
+if [ -n "${SHELL_HAVE_PERL}" ]; then
+ shell_get_perl "/${SHELL_FILENAME}" ${SHELL_START_OFFSET}
+elif [ -n "${SHELL_HAVE_TAIL}" ]; then
+ shell_get_tail "/${SHELL_FILENAME}" ${SHELL_START_OFFSET}
else
- fish_get_dd "/${FISH_FILENAME}" ${FISH_START_OFFSET}
+ shell_get_dd "/${SHELL_FILENAME}" ${SHELL_START_OFFSET}
fi
diff --git a/src/vfs/fish/helpers/hardlink b/src/vfs/shell/helpers/hardlink
index 4f36b3f..f92b332 100644
--- a/src/vfs/fish/helpers/hardlink
+++ b/src/vfs/shell/helpers/hardlink
@@ -1,6 +1,5 @@
-#LINK $FISH_FILEFROM $FISH_FILETO
-FILEFROM="/${FISH_FILEFROM}"
-FILETO="/${FISH_FILETO}"
+FILEFROM="/${SHELL_FILEFROM}"
+FILETO="/${SHELL_FILETO}"
if ln "${FILEFROM}" "${FILETO}" 2>/dev/null; then
echo "### 000"
else
diff --git a/src/vfs/fish/helpers/info b/src/vfs/shell/helpers/info
index b85b0a7..053423a 100644
--- a/src/vfs/fish/helpers/info
+++ b/src/vfs/shell/helpers/info
@@ -1,12 +1,12 @@
LC_TIME=C
export LC_TIME
-#FISH_HAVE_HEAD 1
-#FISH_HAVE_SED 2
-#FISH_HAVE_AWK 4
-#FISH_HAVE_PERL 8
-#FISH_HAVE_LSQ 16
-#FISH_HAVE_DATE_MDYT 32
-#FISH_HAVE_TAIL 64
+#SHELL_HAVE_HEAD 1
+#SHELL_HAVE_SED 2
+#SHELL_HAVE_AWK 4
+#SHELL_HAVE_PERL 8
+#SHELL_HAVE_LSQ 16
+#SHELL_HAVE_DATE_MDYT 32
+#SHELL_HAVE_TAIL 64
res=0
if `echo yes| head -c 1 > /dev/null 2>&1` ; then
res=`expr $res + 1`
diff --git a/src/vfs/fish/helpers/ln b/src/vfs/shell/helpers/ln
index a8445d8..15a20cd 100644
--- a/src/vfs/fish/helpers/ln
+++ b/src/vfs/shell/helpers/ln
@@ -1,6 +1,5 @@
-#SYMLINK $FISH_FILEFROM $FISH_FILETO
-FILEFROM="${FISH_FILEFROM}"
-FILETO="/${FISH_FILETO}"
+FILEFROM="${SHELL_FILEFROM}"
+FILETO="/${SHELL_FILETO}"
if ln -s "${FILEFROM}" "${FILETO}" 2>/dev/null; then
echo "### 000"
else
diff --git a/src/vfs/fish/helpers/ls b/src/vfs/shell/helpers/ls
index 7165b51..c7701d6 100644
--- a/src/vfs/fish/helpers/ls
+++ b/src/vfs/shell/helpers/ls
@@ -1,11 +1,10 @@
-#LIST /${FISH_DIR}
LC_TIME=C
export LC_TIME
perl_res="1"
-fish_list_lsq ()
+shell_list_lsq ()
{
-FISH_DIR="$1"
-ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
+SHELL_DIR="$1"
+ls -Qlan "${SHELL_DIR}" 2>/dev/null | grep '^[^cbt]' | (
while read p l u g s m d y n; do
echo "P$p $u.$g"
echo "S$s"
@@ -15,7 +14,7 @@ while read p l u g s m d y n; do
done
)
-ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
+ls -Qlan "${SHELL_DIR}" 2>/dev/null | grep '^[cb]' | (
while read p l u g a i m d y n; do
echo "P$p $u.$g"
echo "E$a$i"
@@ -27,13 +26,13 @@ done
echo '### 200'
}
-fish_list_sed ()
+shell_list_sed ()
{
-FISH_DIR="$1"
-ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
+SHELL_DIR="$1"
+ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[^cbt]' | (
while read p l u g s rec; do
if [ -n "$g" ]; then
- if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then
filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
else
@@ -43,7 +42,7 @@ while read p l u g s rec; do
pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
echo "P$p $u.$g"
echo "S$s"
- if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then
echo "d$filedate"
else
echo "D$filedate"
@@ -53,10 +52,10 @@ while read p l u g s rec; do
fi
done
)
-ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
+ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[cb]' | (
while read p l u g a i rec; do
if [ -n "$g" ]; then
- if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then
filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
else
@@ -66,7 +65,7 @@ while read p l u g a i rec; do
pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
echo "P$p $u.$g"
echo "E$a$i"
- if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then
echo "d$filedate"
else
echo "D$filedate"
@@ -79,10 +78,10 @@ done
echo '### 200'
}
-fish_list_poor_ls ()
+shell_list_poor_ls ()
{
-FISH_DIR="$1"
-ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
+SHELL_DIR="$1"
+ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[^cbt]' | (
while read p l u g s m d y n n2 n3; do
if [ -n "$g" ]; then
if [ "$m" = "0" ]; then
@@ -98,7 +97,7 @@ while read p l u g s m d y n n2 n3; do
fi
done
)
-ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
+ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[cb]' | (
while read p l u g a i m d y n n2 n3; do
if [ -n "$g" ]; then
if [ "$a" = "0" ]; then
@@ -117,15 +116,14 @@ done
echo '### 200'
}
-fish_list_perl ()
+shell_list_perl ()
{
-FISH_DIR=$1
+SHELL_DIR=$1
perl -e '
use strict;
use POSIX;
-use Fcntl;
-use POSIX ":fcntl_h"; #S_ISLNK was here until 5.6
-import Fcntl ":mode" unless defined &S_ISLNK; #and is now here
+use Fcntl ":mode"; # S_ISLNK, S_IFMT, S_IMODE are here
+use POSIX ":fcntl_h"; # S_ISLNK might be here as well
my $dirname = $ARGV[0];
if (opendir (DIR, $dirname)) {
while((my $filename = readdir (DIR))){
@@ -152,19 +150,19 @@ while((my $filename = readdir (DIR))){
printf("### 500\n");
}
exit 0
-' "/${FISH_DIR}"
+' "/${SHELL_DIR}"
perl_res=$?
}
-if [ -n "${FISH_HAVE_PERL}" ]; then
- fish_list_perl "/${FISH_FILENAME}"
+if [ -n "${SHELL_HAVE_PERL}" ]; then
+ shell_list_perl "/${SHELL_FILENAME}"
fi
if [ "${perl_res}" != "0" ]; then
- if [ -n "${FISH_HAVE_LSQ}" ]; then
- fish_list_lsq "/${FISH_FILENAME}"
- elif [ -n "${FISH_HAVE_SED}" ]; then
- fish_list_sed "/${FISH_FILENAME}"
+ if [ -n "${SHELL_HAVE_LSQ}" ]; then
+ shell_list_lsq "/${SHELL_FILENAME}"
+ elif [ -n "${SHELL_HAVE_SED}" ]; then
+ shell_list_sed "/${SHELL_FILENAME}"
else
- fish_list_poor_ls "/${FISH_FILENAME}"
+ shell_list_poor_ls "/${SHELL_FILENAME}"
fi
fi
diff --git a/src/vfs/shell/helpers/mkdir b/src/vfs/shell/helpers/mkdir
new file mode 100644
index 0000000..b05f125
--- /dev/null
+++ b/src/vfs/shell/helpers/mkdir
@@ -0,0 +1,5 @@
+if mkdir "/$SHELL_FILENAME" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/shell/helpers/mv b/src/vfs/shell/helpers/mv
new file mode 100644
index 0000000..1fd2327
--- /dev/null
+++ b/src/vfs/shell/helpers/mv
@@ -0,0 +1,5 @@
+if mv "/${SHELL_FILEFROM}" "/${SHELL_FILETO}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/shell/helpers/rmdir b/src/vfs/shell/helpers/rmdir
new file mode 100644
index 0000000..88172c4
--- /dev/null
+++ b/src/vfs/shell/helpers/rmdir
@@ -0,0 +1,5 @@
+if rmdir "/${SHELL_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/shell/helpers/send b/src/vfs/shell/helpers/send
new file mode 100644
index 0000000..66c2a1c
--- /dev/null
+++ b/src/vfs/shell/helpers/send
@@ -0,0 +1,16 @@
+FILENAME="/${SHELL_FILENAME}"
+echo "### 001"
+{
+ > "${FILENAME}"
+ bss=4096
+ bsl=4095
+ if [ $SHELL_FILESIZE -lt $bss ]; then
+ bss=1;
+ bsl=0;
+ fi
+ while [ $SHELL_FILESIZE -gt 0 ]; do
+ cnt=`expr \\( $SHELL_FILESIZE + $bsl \\) / $bss`
+ n=`dd bs=$bss count=$cnt | tee -a "${FILENAME}" | wc -c`
+ SHELL_FILESIZE=`expr $SHELL_FILESIZE - $n`
+ done
+}; echo "### 200"
diff --git a/src/vfs/shell/helpers/unlink b/src/vfs/shell/helpers/unlink
new file mode 100644
index 0000000..f02f4d3
--- /dev/null
+++ b/src/vfs/shell/helpers/unlink
@@ -0,0 +1,5 @@
+if rm -f "/${SHELL_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/shell/helpers/utime b/src/vfs/shell/helpers/utime
new file mode 100644
index 0000000..a563431
--- /dev/null
+++ b/src/vfs/shell/helpers/utime
@@ -0,0 +1,12 @@
+if TZ=UTC touch -h -m -d "$SHELL_TOUCHMTIME_W_NSEC" "/${SHELL_FILENAME}" 2>/dev/null && \
+ TZ=UTC touch -h -a -d "$SHELL_TOUCHATIME_W_NSEC" "/${SHELL_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+elif TZ=UTC touch -h -m -t $SHELL_TOUCHMTIME "/${SHELL_FILENAME}" 2>/dev/null && \
+ TZ=UTC touch -h -a -t $SHELL_TOUCHATIME "/${SHELL_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+elif [ -n "$SHELL_HAVE_PERL" ] &&
+ perl -e 'utime '$SHELL_FILEATIME','$SHELL_FILEMTIME',@ARGV;' "/${SHELL_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi