]> git.eshelyaron.com Git - emacs.git/commitdiff
Flocate_file_internal: Protect from `.eln` remapping
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 13 Mar 2022 04:51:22 +0000 (23:51 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 13 Mar 2022 04:51:22 +0000 (23:51 -0500)
Don't use `openp`s functionality to remap `.elc` files to `.eln` files
since `locate-file` is not specific to ELisp files.
This should be not just simpler but more robust than the current
hack which tries to undo the damage after the fact.

* src/lread.c (Flocate_file_internal): Don't map `.elc` to `.eln`.
* lisp/files.el (locate-file): Simplify accordingly.

lisp/files.el
src/lread.c

index 7be93662b1c99727f27328a892fc10a3777bf289..eca8cba93f2099639a1f6803b2af6a06b53c0021 100644 (file)
@@ -987,20 +987,7 @@ one or more of those symbols."
          (logior (if (memq 'executable predicate) 1 0)
                  (if (memq 'writable predicate) 2 0)
                  (if (memq 'readable predicate) 4 0))))
-  (let ((file (locate-file-internal filename path suffixes predicate)))
-    (if (and file (string-match "\\.eln\\'" file))
-        ;; This is all a bit of a mess.  We pass in a list of suffixes
-        ;; that doesn't include .eln, but with a nativecomp emacs, we
-        ;; get the .eln file back.  We then map that to the .el file.
-        ;; But `load-history' has the .elc file, so that's the file we
-        ;; return here (if it exists).
-        (let* ((el (gethash (file-name-nondirectory file) comp-eln-to-el-h))
-               (elc (replace-regexp-in-string "\\.el\\'" ".elc" el)))
-          (if (and (member ".elc" suffixes)
-                   (file-exists-p elc))
-              elc
-            el))
-      file)))
+  (locate-file-internal filename path suffixes predicate))
 
 (defun locate-file-completion-table (dirs suffixes string pred action)
   "Do completion for file names passed to `locate-file'."
index 0486a98883c3a15d511a0ed4939e62e11ee01170..d7b56c5087ebd329bbf4cccef2ac61f0e757f428 100644 (file)
@@ -1661,7 +1661,7 @@ directories, make sure the PREDICATE function returns `dir-ok' for them.  */)
   (Lisp_Object filename, Lisp_Object path, Lisp_Object suffixes, Lisp_Object predicate)
 {
   Lisp_Object file;
-  int fd = openp (path, filename, suffixes, &file, predicate, false, false);
+  int fd = openp (path, filename, suffixes, &file, predicate, false, true);
   if (NILP (predicate) && fd >= 0)
     emacs_close (fd);
   return file;