]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix test for whether the '.el' file is newer than '.elc'
authorEli Zaretskii <eliz@gnu.org>
Wed, 22 Jun 2016 15:55:14 +0000 (18:55 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 22 Jun 2016 15:55:14 +0000 (18:55 +0300)
* src/lread.c (Fload): Don't overwrite the last character of the
file name in FOUND with 'c', unless the file name ended in ".elc"
to begin with.  Don't treat empty files as byte-compiled.  See
http://lists.gnu.org/archive/html/emacs-devel/2016-06/msg00463.html
for more details of the problem this caused.

src/lread.c

index 9f804ac319412dd7bc38b097b15205388f6e6a06..5c47f78f8e458c2daf961d7d0c6271cf8ee9219e 100644 (file)
@@ -1204,7 +1204,11 @@ Return t if the file exists and loads successfully.  */)
   specbind (Qold_style_backquotes, Qnil);
   record_unwind_protect (load_warn_old_style_backquotes, file);
 
-  if (suffix_p (found, ".elc") || (fd >= 0 && (version = safe_to_load_version (fd)) > 0))
+  int is_elc;
+  if ((is_elc = suffix_p (found, ".elc")) != 0
+      /* version = 1 means the file is empty, in which case we can
+        treat it as not byte-compiled.  */
+      || (fd >= 0 && (version = safe_to_load_version (fd)) > 1))
     /* Load .elc files directly, but not when they are
        remote and have no handler!  */
     {
@@ -1231,7 +1235,7 @@ Return t if the file exists and loads successfully.  */)
           /* openp already checked for newness, no point doing it again.
              FIXME would be nice to get a message when openp
              ignores suffix order due to load_prefer_newer.  */
-          if (!load_prefer_newer)
+          if (!load_prefer_newer && is_elc)
             {
               result = stat (SSDATA (efound), &s1);
               if (result == 0)