Function: find-lisp-find-files-internal

find-lisp-find-files-internal is a byte-compiled function defined in find-lisp.el.gz.

Signature

(find-lisp-find-files-internal DIRECTORY FILE-PREDICATE DIRECTORY-PREDICATE)

Documentation

Find files under DIRECTORY which satisfy FILE-PREDICATE.

FILE-PREDICATE is a function which takes two arguments: the file and its directory.

DIRECTORY-PREDICATE is used to decide whether to descend into directories. It is a function which takes two arguments, the directory and its parent.

Source Code

;; Defined in /usr/src/emacs/lisp/find-lisp.el.gz
;; Workhorse function
(defun find-lisp-find-files-internal (directory file-predicate
						directory-predicate)
  "Find files under DIRECTORY which satisfy FILE-PREDICATE.
FILE-PREDICATE is a function which takes two arguments: the file and its
directory.

DIRECTORY-PREDICATE is used to decide whether to descend into directories.
It is a function which takes two arguments, the directory and its parent."
  (setq directory (file-name-as-directory directory))
  (let (results sub-results)
    (dolist (file (directory-files directory nil nil t))
      (let ((fullname (expand-file-name file directory)))
	(when (file-readable-p (expand-file-name file directory))
	  ;; If a directory, check it we should descend into it
	  (and (file-directory-p fullname)
	       (funcall directory-predicate file directory)
	       (progn
		 (setq sub-results
		       (find-lisp-find-files-internal
			fullname
			file-predicate
			directory-predicate))
		 (if results
		     (nconc results sub-results)
		   (setq results sub-results))))
	  ;; For all files and directories, call the file predicate
	  (and (funcall file-predicate file directory)
	       (if results
		   (nconc results (list fullname))
		 (setq results (list fullname)))))))
    results))