all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* file-expand-wildcards should use `save-match-data'
@ 2002-03-25 22:27 Michael Ernst
  2002-03-26  9:08 ` Juanma Barranquero
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Ernst @ 2002-03-25 22:27 UTC (permalink / raw)


In Emacs 21.2, file-expand-wildcards can cause problems in code that calls
it, because it changes the match-data.  This patch corrects the problem.


ChangeLog entry:

2002-03-25  Michael Ernst  <mernst@alum.mit.edu>

	* files.el (file-expand-wildcards): Use `save-match-data'.

*** /usr/local/share/emacs/21.2/lisp/files.el	Mon Jan 28 11:49:53 2002
--- -	Mon Mar 25 17:24:13 2002
***************
*** 3417,3451 ****
  The file names returned are normally also relative to the current
  default directory.  However, if FULL is non-nil, they are absolute."
!   (let* ((nondir (file-name-nondirectory pattern))
! 	 (dirpart (file-name-directory pattern))
! 	 ;; A list of all dirs that DIRPART specifies.
! 	 ;; This can be more than one dir
! 	 ;; if DIRPART contains wildcards.
! 	 (dirs (if (and dirpart (string-match "[[*?]" dirpart))
! 		   (mapcar 'file-name-as-directory
! 			   (file-expand-wildcards (directory-file-name dirpart)))
! 		 (list dirpart)))
! 	 contents)
!     (while dirs
!       (when (or (null (car dirs))	; Possible if DIRPART is not wild.
! 		(file-directory-p (directory-file-name (car dirs))))
! 	(let ((this-dir-contents
! 	       ;; Filter out "." and ".."
! 	       (delq nil
! 		     (mapcar #'(lambda (name)
! 				 (unless (string-match "\\`\\.\\.?\\'"
! 						       (file-name-nondirectory name))
! 				   name))
! 			     (directory-files (or (car dirs) ".") full
! 					      (wildcard-to-regexp nondir))))))
! 	  (setq contents
! 		(nconc
! 		 (if (and (car dirs) (not full))
! 		     (mapcar (function (lambda (name) (concat (car dirs) name)))
! 			     this-dir-contents)
! 		   this-dir-contents)
! 		 contents))))
!       (setq dirs (cdr dirs)))
!     contents))
  
  (defun list-directory (dirname &optional verbose)
--- 3417,3452 ----
  The file names returned are normally also relative to the current
  default directory.  However, if FULL is non-nil, they are absolute."
!   (save-match-data
!     (let* ((nondir (file-name-nondirectory pattern))
! 	   (dirpart (file-name-directory pattern))
! 	   ;; A list of all dirs that DIRPART specifies.
! 	   ;; This can be more than one dir
! 	   ;; if DIRPART contains wildcards.
! 	   (dirs (if (and dirpart (string-match "[[*?]" dirpart))
! 		     (mapcar 'file-name-as-directory
! 			     (file-expand-wildcards (directory-file-name dirpart)))
! 		   (list dirpart)))
! 	   contents)
!       (while dirs
! 	(when (or (null (car dirs))	; Possible if DIRPART is not wild.
! 		  (file-directory-p (directory-file-name (car dirs))))
! 	  (let ((this-dir-contents
! 		 ;; Filter out "." and ".."
! 		 (delq nil
! 		       (mapcar #'(lambda (name)
! 				   (unless (string-match "\\`\\.\\.?\\'"
! 							 (file-name-nondirectory name))
! 				     name))
! 			       (directory-files (or (car dirs) ".") full
! 						(wildcard-to-regexp nondir))))))
! 	    (setq contents
! 		  (nconc
! 		   (if (and (car dirs) (not full))
! 		       (mapcar (function (lambda (name) (concat (car dirs) name)))
! 			       this-dir-contents)
! 		     this-dir-contents)
! 		   contents))))
! 	(setq dirs (cdr dirs)))
!       contents)))
  
  (defun list-directory (dirname &optional verbose)

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: file-expand-wildcards should use `save-match-data'
  2002-03-25 22:27 file-expand-wildcards should use `save-match-data' Michael Ernst
@ 2002-03-26  9:08 ` Juanma Barranquero
  2002-03-28  4:56   ` Richard Stallman
  0 siblings, 1 reply; 4+ messages in thread
From: Juanma Barranquero @ 2002-03-26  9:08 UTC (permalink / raw)
  Cc: bug-gnu-emacs


On Mon, 25 Mar 2002 17:27:33 -0500, Michael Ernst <mernst@alum.mit.edu> wrote:

> In Emacs 21.2, file-expand-wildcards can cause problems in code that calls
> it, because it changes the match-data.  This patch corrects the problem.

Please, see the thread starting on:

http://mail.gnu.org/pipermail/emacs-devel/2002-February/006028.html

Consensus seems to be that user code shouldn't trust the save-match-data
to be consistent across function invocations, unless they're basic
primitives or "functions that have the spirit of a general-purpose
facility". (FWIW, I don't know if file-expand-wildcards matchs that
definition :)


                                                           /L/e/k/t/u

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: file-expand-wildcards should use `save-match-data'
  2002-03-26  9:08 ` Juanma Barranquero
@ 2002-03-28  4:56   ` Richard Stallman
  2002-03-28 14:47     ` Stefan Monnier
  0 siblings, 1 reply; 4+ messages in thread
From: Richard Stallman @ 2002-03-28  4:56 UTC (permalink / raw)
  Cc: mernst, bug-gnu-emacs

file-expand-wildcards is a general-purpose facility,
and regexp matching is not its job, so I think it should
use save-match-data.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: file-expand-wildcards should use `save-match-data'
  2002-03-28  4:56   ` Richard Stallman
@ 2002-03-28 14:47     ` Stefan Monnier
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Monnier @ 2002-03-28 14:47 UTC (permalink / raw)


>>>>> "Richard" == Richard Stallman <rms@gnu.org> writes:
> file-expand-wildcards is a general-purpose facility,
> and regexp matching is not its job, so I think it should
> use save-match-data.

I'm not sure what the criterion should be, and I don't really care
if file-expand-wildcards saves match-data or not, but it does
seem that file-expand-wildcards is rarely used (more specifically,
it's used twice in emacs/lisp/* plus one comment in complete.el
saying that it could now be used there) and more importantly that
few code if any would do

    match...file-expand-wildcards...use match-data

So I'd be interested to know Michael Ernst's code that broke because
of file-expand-wildcards not saving match-data.


	Stefan

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-03-28 14:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-03-25 22:27 file-expand-wildcards should use `save-match-data' Michael Ernst
2002-03-26  9:08 ` Juanma Barranquero
2002-03-28  4:56   ` Richard Stallman
2002-03-28 14:47     ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.