Commits

Anonymous committed 0083a6a

Synch up with the final release of EFS 1.20.

Comments (0)

Files changed (40)

-2002-03-25  Steve Youngs  <youngs@xemacs.org>
+2002-04-18  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
 
-	* Makefile (VERSION): 1.28 released.
+	* EFS 1.20.
 
-2002-03-12  Adrian Aichner  <adrian@xemacs.org>
+2002-04-13  Jonathan Harris <jhar@tardis.ed.ac.uk>
 
-	* efs.texi: Fix typos found by my own grep-for-likely-typo.pl.
+	* efs-dired.el (efs-dired-compress-file): 
+	* efs.el (efs-recover-file): 
+	* efs-cu.el (efs-chase-symlinks): Force proper use of
+	`efs-file-symlink-p'.
 
-2002-01-13  Steve Youngs  <youngs@xemacs.org>
+2002-04-13  Bob Weiner <weiner@altrasoft.com>
 
-	* package-info.in (provides): Update to include all provides.
+	* efs.el: 
+	(efs-wipe-from-ls-cache):
+	(efs-substitute-in-file-name):
+	(efs-file-name-as-directory):
+	(efs-file-name-directory):
+	(efs-file-name-nondirectory):
+	(efs-directory-file-name): Catch potential nil return values of
+	`efs-ftp-path.'
 
-2002-01-07  Adrian Aichner  <adrian@xemacs.org>
+2002-04-13  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
 
-	* Makefile (HTML_FILES): New.
-	* Makefile (HTML_DEP): New.
+	* efs.el (efs-file-regular-p): 
+	(efs-internal-file-regular-p): 
+	* efs-guardian.el (efs-internal-file-regular-p): Added
+	`file-regular-p' for remote files.
+
+	* efs.el (efs-substitute-in-file-name): Recognize _ in environment
+	variable names.
+	(efs-dumb-unix-listing-regexp): Recognize newer version of NcFTPd.
+
+2002-04-03  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+	* efs.el (efs-abort-recursive-edit-and-then): Supplied missing
+	second argument to `setq'.
+	(efs-quoted-cmds): Added.
+	(efs-quote-percents): Added.
+	(efs-ftp-broken-quote): Added.
+	(efs-raw-send-cmd): Quote % for QUOTE commands in broken ftp
+	clients which are derivatives of ftp in 4.2BSD.
+
+2002-04-02  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+	* passwd.el (read-passwd-1): Bind `binding' later to fix bug
+	reported by Nuutti Kotivuori <nuutti.kotivuori@smarttrust.com> on
+	xemacs-patches.
+	(read-passwd): Prevent `view-lossage' from seeing the password.
+
+	* efs-guardian.el (efs-fix-dir-path): Add missing `dir-path'
+	parameter to `format.'
+
+	* efs-netrc.el (efs-netrc-scream-and-yell): Handle temp buffer
+	more properly.
+
+2002-03-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* efs.el (efs-load): Work for `after-load-alist'.
+
+2001-08-10  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+	* efs-cu.el (efs-path-regexp): Allow @ within user arg.
+
+	* efs.el (efs-skip-msgs-alist): Make the "EPSV not understood
+	regexp" more liberal.
+
+2001-08-09  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+	* efs.el (efs-process-scream-and-yell): Send bug reports to
+	efs-bugs, not ange.
 
 2001-06-09  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
 
 include Makefile.efs
 
 VERSION = 1.28
-AUTHOR_VERSION = 1.20pre2
+AUTHOR_VERSION = 1.20
 MAINTAINER = Mike Sperber <sperber@informatik.uni-tuebingen.de>
 PACKAGE = efs
 PKG_TYPE = regular
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-auto.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.8 $
 ;; RCS:          
 ;; Description:  Simple way of autoloading efs
 (require 'efs-fnh)
 
 (defconst efs-auto-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.8 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-cms-knet.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  CMS support for efs using KNET/VM server
 (require 'efs)
 
 (defconst efs-cms-knet-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-cms.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.9 $
 ;; RCS:          
 ;; Description:  CMS support for efs
 (require 'efs)
 
 (defconst efs-cms-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.9 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-coke.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Coke Machine support for efs
 (require 'efs)
 
 (defconst efs-coke-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-cp-p.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Support for preserving file modtimes with copies. i.e. cp -p
 ;;;; Internal Variables
 
 (defconst efs-cp-p-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-cu.el
-;; Release:      $efs release: 1.20pre2 $
-;; Version:      #Revision: 1.12 $
+;; Release:      $efs release: 1.20 $
+;; Version:      #Revision: 1.13 $
 ;; RCS:          
 ;; Description:  Common utilities needed by efs files.
 ;; Author:       Sandy Rutherford <sandy@ibm550.sissa.it>
 ;;;; -------------------------------------------------------------
 
 (defconst efs-cu-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
-	  (substring "#Revision: 1.12 $" 11 -2)))
+	  (substring "#Revision: 1.13 $" 11 -2)))
 
 (defconst efs-case-insensitive-host-types
   '(vms cms mts ti-twenex ti-explorer dos mvs tops-20 mpe ka9q dos-distinct
 ;; As well the below two functions depend on the grouping constructs
 ;; in efs-path-regexp. So know what you're doing if you change them.
 
-(defvar efs-path-regexp "^/\\([^@:/]*@\\)?\\([^@:/]*\\):.*"
+(defvar efs-path-regexp "^/\\([^:/]*@\\)?\\([^@:/]*\\):.*"
   "Regexp of a fully expanded remote path.")
 
 (defvar efs-path-format-string "/%s@%s:%s"
   ;; every level, only the bottom level. Therefore, it is not useful for
   ;; obtaining the truename of a file. It is useful for getting at file
   ;; attributes, with a lot less overhead than file truename.
-  (let ((target (file-symlink-p file)))
+
+  ;; `file-symlink-p' just returns nil without running its handler(s)
+  ;; and make-symbolic-link doesn't exist at all on systems that don't
+  ;; support symlinks (ie S_IFLNK is undefined) such as MS Windows with
+  ;; on some Emacsen and XEmacsen.
+  (let ((target (if (efs-ftp-path file)
+		    (efs-file-symlink-p file)
+		  (file-symlink-p file))))
     (if target
 	(efs-chase-symlinks
 	 (expand-file-name target (file-name-directory file)))
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-defun.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  efs-defun allows for OS-dependent coding of functions
 ;;; Variables
 
 (defconst efs-defun-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 

efs-dired-mule.el

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-dired.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.2 $
 ;; RCS:          
 ;; Description:  Makes efs-dired.el work with MULE.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defconst efs-dired-mule-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.2 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-dired.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.32 $
 ;; RCS:          
 ;; Description:  Extends much of Dired to work under efs.
 (autoload 'dired-shell-call-process "dired-shell")
 
 (defconst efs-dired-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.32 $" 11 -2)))
 
   (let* ((compressed-fn (efs-dired-make-compressed-filename file))
 	 (host (car (efs-ftp-path file)))
 	 (host-type (efs-host-type host)))
-    (cond ((file-symlink-p file)
+    (cond ((efs-file-symlink-p file)
 	   (if cont
 	       (efs-call-cont
 		cont 'failed
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-dl.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.3 $
 ;; RCS:          
 ;; Description:  Unix descriptive listing support for efs
 (require 'efs)
 
 (defconst efs-dl-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.3 $" 11 -2)))
 

efs-dos-distinct.el

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-dos-distinct.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Distinct's DOS FTP server support for efs
 (require 'efs)
 
 (defconst efs-dos-distinct-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-dump.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.2 $
 ;; RCS:
 ;; Description:  Install a bare-bones EFS hook into file-name-handler-alist
 (provide 'efs-dump)
 
 (defconst efs-dump-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.2 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-fnh.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.4 $
 ;; RCS:
 ;; Description:  Look for the emacs version, and install into
 (provide 'efs-fnh)
 
 (defconst efs-fnh-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.4 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-guardian.el
-;; Release:      $efs release: 1.20pre2 $
-;; Version:      #Revision: 1.7 $
+;; Release:      $efs release: 1.20 $
+;; Version:      #Revision: 1.8 $
 ;; RCS:          
 ;; Description:  Guardian support for efs
 ;; Author:       Sandy Rutherford <sandy@math.ubc.ca>
 ;;; and debugging. Thanks.
 
 (defconst efs-guardian-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
-	  (substring "#Revision: 1.7 $" 11 -2)))
+	  (substring "#Revision: 1.8 $" 11 -2)))
 
 (provide 'efs-guardian)
 (require 'efs)
 		    (list "."
 			  (substring dir-path (1+ (match-beginning 3)))))))
        (t
-	(error "path %s is invalid for the guardian operating system"))))))
+	(error "path %s is invalid for the guardian operating system" dir-path))))))
 
 (efs-defun efs-parse-listing guardian
   (host user dir path &optional switches)
 	  t
 	(efs-internal-file-directory-p nil file)))))
 
+(efs-defun efs-internal-file-regular-p guardian (file)
+  (efs-save-match-data
+    (let ((case-fold-search t))
+      (if (string-match "^/\\$[A-Z0-9]+\\(/[A-Z0-9]+\\)?/?$" file)
+	  nil
+	(efs-internal-file-regular-p nil file)))))
+
 (efs-defun efs-internal-file-exists-p guardian (file)
   ;; Directories pop into existence simply by putting files in them.
   (efs-save-match-data
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-gwp.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Support for efs to use an interactive gateway.
 ;;; Internal Variables
 
 (defconst efs-gwp-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-hell.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Hellsoft FTP server support for efs
 (require 'efs)
 
 (defconst efs-hell-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-ka9q.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.2 $
 ;; RCS:          
 ;; Description:  KA9Q support for efs
 (require 'efs)
 
 (defconst efs-ka9q-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.2 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-kerberos.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:
 ;; Description:  Support for Kerberos gateways.
 (require 'efs)
 
 (defconst efs-kerberos-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-mpe.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.8 $
 ;; RCS:          
 ;; Description:  MPE (HP3000) support for efs.
 ;;; Internal Variables
 
 (defconst efs-mpe-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.8 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-ms-unix.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  efs support for the Microsoft PC FTP server in unix mode.
 (require 'efs)
 
 (defconst efs-ms-unix-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-mts.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  MTS support for efs
 (require 'efs)
 
 (defconst efs-mts-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-mvs.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.4 $
 ;; RCS:          
 ;; Description:  MVS support for efs
 (require 'efs)
 
 (defconst efs-mvs-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.4 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-netrc.el
-;; Release:      $efs release: 1.20pre2 $
-;; Version:      #Revision: 1.3 $
+;; Release:      $efs release: 1.20 $
+;; Version:      #Revision: 1.4 $
 ;; RCS:          
 ;; Description:  Parses ~/.netrc file, and does completion in /.
 ;; Author:       Sandy Rutherford <sandy@ibm550.sissa.it>
 ;;;; ------------------------------------------------------------
 
 (defconst efs-netrc-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
-	  (substring "#Revision: 1.2 $" 11 -2)))
+	  (substring "#Revision: 1.4 $" 11 -2)))
 
 ;; Make the byte compiler happy.
 (defvar dired-directory)
 	 (modes (nth 8 attr))
 	 (bad-protect (not (string-match ".r..------" modes))))
     (if (or bad-own bad-protect)
-	(save-window-excursion
-	  (with-output-to-temp-buffer "*Help*"
+	(with-output-to-temp-buffer (help-buffer-name nil)
+	  (progn
 	    (if bad-own
 		(princ
 		 (format
 	     "\nIf this is intentional, then setting \
 efs-disable-netrc-security-check
 to t will inhibit this warning in the future.\n"))
-	  (select-window (get-buffer-window "*Help*"))
-	  (enlarge-window (- (count-lines (point-min) (point-max))
-			     (window-height) -1))
+	  (show-temp-buffer-in-current-frame standard-output)
 	  (if (and bad-protect
 		   (y-or-n-p (format "Set permissions on %s to 600? " file)))
 	      (set-file-modes file 384))))))
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-netware.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.5 $
 ;; RCS:          
 ;; Description:  efs support for the Novell Netware FTP server
 (require 'efs)
 
 (defconst efs-netware-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.5 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-nos-ve.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.2 $
 ;; RCS:          
 ;; Description:  efs support for NOS/VE
 ;;; providing imformation and testing.
 
 (defconst efs-nos-ve-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.2 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-ovwrt.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.3 $
 ;; RCS:
 ;; Description:  Utilities for overwriting functions with new definitions.
     (error)))
 
 (defconst efs-ovwrt-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.3 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-pc.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  PC support for efs
 (require 'efs)
 
 (defconst efs-pc-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-plan9.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  efs support for the Plan 9 FTP Server
 (require 'efs)
 
 (defconst efs-plan9-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-report.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.10 $
 ;; RCS:          
 ;; Description:  Function to report efs bugs in a usable way.
 ;;; Variables
 
 (defconst efs-report-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.10 $" 11 -2)))
 

efs-ti-explorer.el

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-ti-explorer.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Explorer support for efs
 (require 'efs)
 
 (defconst efs-ti-explorer-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-ti-twenex.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  Support for a TI lisp machine in Twenex emulation mode.
 (require 'efs)
 
 (defconst efs-ti-twenex-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-tops-20.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Description:  TOPS-20 support for efs
 (provide 'efs-tops-20)
 
 (defconst efs-tops-20-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-vms.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.13 $
 ;; RCS:          
 ;; Description:  VMS support for efs
 (require 'efs)
 
 (defconst efs-vms-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.13 $" 11 -2)))
 
 ;;
 ;; File:         efs-vos.el
 ;; Description:  VOS support for efs
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.1 $
 ;; RCS:          
 ;; Author:       Sandy Rutherford <sandy@ibm550.sissa.it>
 (require 'efs)
 
 (defconst efs-vos-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.1 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs-x19.15.el
-;; Release:      $efs release: 1.20pre2 $
+;; Release:      $efs release: 1.20 $
 ;; Version:      #Revision: 1.2 $
 ;; RCS:          
 ;; Description:  efs support for XEmacs, versions 19.15, and later.
 (require 'efs-ovwrt)
 
 (defconst efs-x19\.15-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
 	  (substring "#Revision: 1.2 $" 11 -2)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         efs.el
-;; Release:      $efs release: 1.20pre2 $
-;; Version:      #Revision: 1.65 $
+;; Release:      $efs release: 1.20 $
+;; Version:      #Revision: 1.66 $
 ;; RCS:          
 ;; Description:  Transparent FTP support for the original GNU Emacs
 ;;               from FSF and XEmacs
 ;;;    efs|Andy Norman and Sandy Rutherford
 ;;;    |ange@hplb.hpl.hp.com and sandy@ibm550.sissa.it
 ;;;    |transparent FTP Support for GNU Emacs
-;;;    |$Date$|$efs release: 1.20pre2 $|
+;;;    |$Date$|$efs release: 1.20 $|
 
 ;;; Host and listing type notation:
 ;;;
 ;;;; ------------------------------------------------------------
 
 (defconst efs-version
-  (concat (substring "$efs release: 1.20pre2 $" 14 -2)
+  (concat (substring "$efs release: 1.20 $" 14 -2)
 	  "/"
-	  (substring "#Revision: 1.63 $" 11 -2)))
+	  (substring "#Revision: 1.66 $" 11 -2)))
 
 (defconst efs-time-zero 1970) ; we count time from midnight, Jan 1, 1970 GMT.
 
 		 (const nil))
   :group 'efs-programs)
 
+(defcustom efs-ftp-broken-quote nil
+  "If non-NIL, double \% characters in quote commands.
+This works around a common bug in many BSD ftp client derivatives."
+  :type 'boolean
+  :group 'efs-programs)
+
 (defcustom efs-nslookup-program
   (and (not (eq system-type 'windows-nt)) "nslookup")
   "*If non-NIL then a string naming the nslookup program."
    (cons "^ls \\|^put \\|^get \\|^append \\|passive"
 	 ;; Some ftp clients try this first by default and do not
 	 ;; filter out the reply.
-	 "^500 EPSV not understood")))
+	 "^500 .*EPSV.* not understood")))
   
 (defvar efs-cmd-ok-msgs
   ;; RFC959 compliant
 ;; Regexp to match commands for sending passwords.
 ;; All text following (match-end 0) will be replaced by "Turtle Power!"
 
+(defvar efs-quoted-cmds
+  "^quote ")
+;; Regexp to match quoted commands.
+
 (defvar efs-bytes-received-msgs
   ;; Strictly a client response
   "^[0-9]+ bytes ")
 	     (function
 	      (lambda (proc string)
 		(let ((data efs-abort-recursive-edit-data))
-		  (setq efs-abort-recursive-edit-data)
+		  (setq efs-abort-recursive-edit-data nil)
 		  (if (and data
 			   (integerp (car data))
 			   (<= (- (nth 1 (current-time)) (car data))
 	"efs is unable to identify the following reply code
 from the ftp server " host ":\n\n" line "
 
-Please send a bug report to ange@hplb.hpl.hp.com.
+Please send a bug report to efs-bugs@hplb.hpl.hp.com.
 In your report include a transcript of your\n"
 buff " buffer."))))
   (error "Unable to identify server code."))
 	(goto-char (point-max))
 	(move-marker comint-last-input-start (point))
 	(move-marker comint-last-input-end (point))
+	(if (and efs-ftp-broken-quote
+		 (string-match efs-quoted-cmds cmd))
+	    (setq cmd (efs-quote-percents cmd)))
 	;; don't insert the password into the buffer on the USER command.
 	(efs-save-match-data
 	  (if (string-match efs-passwd-cmds cmd)
     
     (error "FTP process %s has died." (process-name proc))))
 
+(defun efs-quote-percents (string)
+  ;; Quote `%' as `%%' in STRING to work around BSD ftp client bug.
+  (let ((pos 0))
+    (while (setq pos (string-match "\\%" string pos))
+      (setq string (concat (substring string 0 pos)
+			   "%";; precede by escape character (also a %)
+			   (substring string pos))
+	    ;; add 2 instead 1 since another % was inserted
+	    pos (+ 2 pos)))
+    string))
+
 (defun efs-adjust-local-path (path)
   "Adjust PATH to conventions of local ftp client."
   (if efs-slash-local-paths
 		(lambda (x)
 		  (let ((parsed (efs-ftp-path (car x))))
 		    (and (not
-			  (and (string-equal (car parsed) host)
+			  (and parsed
+			       (string-equal (car parsed) host)
 			       (string-equal (if case-insens
 						 (downcase (nth 1 parsed))
 					       (nth 1 parsed))
   (concat
    "^\\([0-9,.]+\\|No\\) files\\. [0-9,.]+ bytes free\\. "
    "Disk size [0-9,]+ bytes\\.$"))
+
 ;; This version of the regexp is really for hosts which allow some switches,
 ;; but not ours. Rather than determine which switches we could be using
 ;; we just assume that it's dumb.
 (defconst efs-dumb-unix-listing-regexp
   (concat
    "^[Uu]sage: +ls +-[a-zA-Z0-9]+[ \n]\\|"
+   ;; NcFTPd server
    "^Only ls flags accepted are\\|"
+   "ls flag is not implemented\\|"
    ;; Unitree server
    "^Error getting stats for \"-[a-zA-Z0-9]+\""))
 
 		   (setq start (match-end 0)
 			 new (concat new var))
 		 (setq new (concat new "$"))))
-	      ((eq (string-match "[a-zA-Z0-9]+" string start) start)
+	      ((eq (string-match "[a-zA-Z0-9_]+" string start) start)
 	       (if (setq var (getenv
 			      (substring string start (match-end 0))))
 		   (setq start (match-end 0)
 		  parsed (efs-ftp-path root))
 
 	    (if (and (not fudge-host-type)
+		     parsed
 		     ;; This may trigger an FTP connection
 		     (memq (efs-host-type (car parsed) (nth 1 parsed))
 			   '(apollo-unix dumb-apollo-unix)))
   ;; For some systems, it may also remove .DIR like extensions.
   (let* ((parsed (efs-ftp-path name))
 	 (file (nth 2 parsed)))
-    (if (string-equal file "")
+    (if (or (null parsed)
+	    (string-equal file ""))
 	name
       (efs-internal-file-name-as-directory
        (efs-host-type (car parsed) (nth 1 parsed)) name))))
   ;; turn /user@host: into /.
   (let ((path (nth 2 (efs-ftp-path name)))
 	file-name-handler-alist)
-    (if (or (string-equal path "")
+    (if (or (null path)
+	    (string-equal path "")
 	    (and (= (string-to-char path) ?~)
 		 (not
 		  (efs-save-match-data
   ;; Computes file-name-nondirectory for remote files.
   ;; For expanded filenames, can just call efs-internal-file-name-nondirectory.
   (let ((file (nth 2 (efs-ftp-path name))))
-    (if (or (string-equal file "")
+    (if (or (null file)
+	    (string-equal file "")
 	    (and (= (string-to-char file) ?~)
 		 (not
 		  (efs-save-match-data
   ;; Computes directory-file-name for remote files.
   ;; Needs to be careful not to turn /foo@bar:/ into /foo@bar:
   (let ((parsed (efs-ftp-path dir)))
-    (if (string-equal "/" (nth 2 parsed))
+    (if (or (null parsed)
+	    (string-equal "/" (nth 2 parsed)))
 	dir
       (efs-internal-directory-file-name dir))))
 
 					  (car file-parsed)))
 			   (princ
 			    (let ((default-directory exec-directory))
-			      (efs-ls file (if (file-symlink-p file)
+			      (efs-ls file (if (efs-file-symlink-p file)
 					       "-lL" "-l")
 				      t t))))
 		       (princ "On the local host:\n")
 		(efs-internal-directory-file-name path)))
 	    file-ent)))))
 
+(defun efs-file-regular-p (file)
+  (let* ((file (expand-file-name file))
+	 (parsed (efs-ftp-path file)))
+    (efs-internal-file-regular-p (efs-host-type (car parsed) (nth 1 parsed))
+				 file)))
+
+(efs-defun efs-internal-file-regular-p nil (path)
+  ;; Version of file-regular-p for remote files.
+  (let ((parsed (efs-ftp-path path)))
+    (if (string-equal (nth 2 parsed) "/") ; root is always a directory
+	nil
+      (let* ((file-ent (efs-get-file-entry
+			(efs-internal-file-name-as-directory
+			 (efs-host-type (car parsed) (nth 1 parsed))
+			 path))))
+	(if (not file-ent)
+	    nil
+	  (let ((file-type (car file-ent)))
+	    ;; We do a file-name-as-directory on path here because some
+	    ;; machines (VMS) use a .DIR to indicate the filename associated
+	    ;; with a directory. This needs to be canonicalized.
+	    (if (stringp file-type)
+		(efs-internal-file-regular-p
+		 nil
+		 (efs-chase-symlinks
+		  ;; efs-internal-directory-file-name
+		  ;; only loses for paths where the remote file
+		  ;; is /. This has been eliminated.
+		  (efs-internal-directory-file-name path)))
+	      (not file-type))))))))
+
 (defun efs-file-attributes (file)
   ;; Returns file-file-attributes for a remote file.
   ;; For the file modtime does not return efs's cached value, as that
     (if (not filename)
 	(and (null noerror) (signal 'file-error
 				    (list "Cannot open load file %s" file)))
-      (let ((parsed (efs-ftp-path filename))
-	    (after-load (and (boundp 'after-load-alist)
-			     (assoc file after-load-alist))))
+      (let* ((parsed (efs-ftp-path filename))
+	     (after-load (and (boundp 'after-load-alist)
+			      (assoc (file-name-sans-extension
+				      (file-name-nondirectory file))
+				     after-load-alist)))
+	     (after-load-alist (and (boundp 'after-load-alist)
+				    (delq after-load
+					  (copy-alist after-load-alist)))))
 	(if parsed
 	    (let ((temp (car (efs-make-tmp-name nil (car parsed)))))
 	      (unwind-protect
 		    (efs-copy-file-internal
 		     filename parsed temp nil t nil
 		     (format "Getting %s" filename))
-		    (or (file-readable-p temp)
+		    (if (not (file-readable-p temp))
 			(signal-error
 			 'file-error
 			 (list "efs-load: temp file %s is unreadable" temp)))
-		    (or nomessage
+		    (if (not nomessage)
 			(message "Loading %s..." file))
 		    ;; temp is an absolute filename, so load path
 		    ;; won't be searched.
-		    (let (after-load-alist)
-		      (efs-real-load temp t t t))
-		    (or nomessage
+		    (efs-real-load temp t t t)
+		    (if (not nomessage)
 			(message "Loading %s...done" file))
 		    (if after-load (mapcar 'eval (cdr after-load)))
 		    t) ; return t if everything worked
 		(efs-del-tmp-name temp)))
 	  (prog2
-	   (or nomessage
-	       (message "Loading %s..." file))
-	   (let (after-load-alist)
-	     (or (efs-real-load filename noerror t t)
-		 (setq after-load nil)))
-	   (or nomessage
-	       (message "Loading %s...done" file))
-	   (if after-load (mapcar 'eval (cdr after-load)))))))))
+	      (or nomessage
+		  (message "Loading %s..." file))
+	      (or (efs-real-load filename noerror t t)
+		  (setq after-load nil))
+	    (or nomessage
+		(message "Loading %s...done" file))
+	    (if after-load (mapcar 'eval (cdr after-load)))))))))
 
 (defun efs-require (feature &optional filename)
   "Documented as original."
 (put 'recover-file 'efs 'efs-recover-file)
 ;; file properties
 (put 'file-directory-p 'efs 'efs-file-directory-p)
+(put 'file-regular-p 'efs 'efs-file-regular-p)
 (put 'file-writable-p 'efs 'efs-file-writable-p)
 (put 'file-readable-p 'efs 'efs-file-readable-p)
 (put 'file-executable-p 'efs 'efs-file-executable-p)
 
 This info is for version 1.20 of EFS.
 
-Documentation version: 1.3
+Documentation version: 1.4
 
 Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc.
 
 @center and on documentation in the EFS source code
 @center It was put together by Mike Sperber.
 
-This documentation preliminary.
+This documentation is preliminary.
 
-@center Info Version 1.2
+@center Info Version 1.4
 @page
 @vskip 0pt plus 1filll
 Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc.
 must be at the end of the host line, however there may be an arbitrary
 number of them for any given host.
 
+@subsection Broken ftp clients
+
+Many ftp clients are derivatives of the ftp command found in 4.2BSD.
+This has a bug in the implementation of the @code{QUOTE} command which
+causes the commands to be fed into @code{sprintf} as format strings.
+For passwords, this means that @code{\%} characters are misinterpreted.
+To work around this bug, set @code{efs-ftp-broken-quote} to non-NIL.
+
 @node Using Dired, Using a .netrc, Passwords, Using EFS
 @comment  node-name,  next,  previous,  up
 @section Using Dired
 executing @code{revert-buffer}
 @findex revert-buffer
 with a prefix argument (@kbd{C-u g} in the Dired buffer) 
-will force a refresh of both the buffer @emph{and also EFS's
+will force a refresh of both the the buffer @emph{and also EFS's
 internal cache}. If you find that filename completion isn't working on a
 @cindex filename completion
 file that you @emph{know} is there, this is how to fix the problem.
 if you use a VMS host regularly, it's a good idea to set
 @code{efs-vms-host-regexp} to a regular expression matching that
 @vindex efs-vms-host-regexp
-host's name. For instance, if you use @code{ymir.claremont.edu} a lot,
+host's name. For instance, if use use @code{ymir.claremont.edu} a lot,
 place the following in your .emacs:
 @example
 (setq efs-vms-host-regexp "^ymir.claremont.edu$")
    filename FILENAME
    md5sum MD5SUM
    size SIZE
-   provides (default-dir efs-auto efs-cms-knet efs-cms efs-coke efs-cp-p efs-cu efs-defun efs-dired efs-unix:dl efs-dos-distinct efs-dump efs-fnh efs-guardian efs-gwp efs-hell efs-ka9q efs-kerberos efs-mpe efs-ms-unix efs-mts efs-mvs efs-netrc efs-netware efs-nos-ve efs-ovwrt efs-pc efs-plan9 efs-report efs-ti-explorer efs-ti-twenex efs-tops-20 efs-vms efs-vos efs-x19\.15 efs)
+   provides (efs)
    requires (REQUIRES)
    type regular
 ))