emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Viper tests failure?


From: Phillip Lord
Subject: Re: Viper tests failure?
Date: Tue, 21 Jun 2016 21:26:58 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.95 (gnu/linux)

Eli Zaretskii <address@hidden> writes:
>> The file is only created to be empty (viper loads the custom-file
>> whatever I do, so making an empty one seemed the only way to disable it.
>> 
>> I've checked and the error comes from the viper-load-custom-file
>> function which is calle during load. The file exists according to emacs,
>> but it cannot be loaded.
>> 
>> Not sure what to test next.
>
> The problem is real.  There's a bug in Fload: it blindly overwrites
> the last character of the file name, without making sure it ends in
> ".elc".  That's why the simple change below (which is really a
> workaround) fixes the problem for me.
>
> The bug is here:
>
>           /* 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)
>             {
>               result = stat (SSDATA (efound), &s1);
>               if (result == 0)
>                 {
>                   SSET (efound, SBYTES (efound) - 1, 0);
>                   result = stat (SSDATA (efound), &s2);
>                   SSET (efound, SBYTES (efound) - 1, 'c');
>                 }
>
> This removes the last character of the file, then replaces it with
> 'c', but we can end up in this fragment when the file name does not
> end in a ".elc", because the condition which guards this says:
>
>   if (suffix_p (found, ".elc") || (fd >= 0 && (version = safe_to_load_version 
> (fd)) > 0))
>
> and the second alternative does not guarantee that the file name ends
> in ".elc".
>
> The error message we see on Windows is misleading, because it uses the
> correct file name, not the one Emacs tries to open.  The error only
> happens on Windows, because we don't use fdopen there, but instead
> close and reopen the file -- using the wrong name.
>
> And here's the simple workaround I mentioned:
>
> diff --git a/test/lisp/emulation/viper-tests.el 
> b/test/lisp/emulation/viper-tests.el
> index 074dd63..0d6095b 100644
> --- a/test/lisp/emulation/viper-tests.el
> +++ b/test/lisp/emulation/viper-tests.el
> @@ -38,7 +38,7 @@ viper-test-undo-kmacro
>          ;; Select an expert-level for the same reason.
>          (viper-expert-level 5)
>          ;; viper loads this even with -q so make sure it's empty!
> -        (viper-custom-file-name (make-temp-file "viper-tests"))
> +        (viper-custom-file-name (make-temp-file "viper-tests" nil ".elc"))
>          (before-buffer (current-buffer)))
>      (unwind-protect
>          (progn


Okay, I was wondering whether it was a problem with the suffix.

The viper-test is fix obviously fine by me -- should have done it that
way in the first place, although uncovering the Fload but is a nice side
effect. Can you add it to emacs-25 (I'm away from my windows machine,
and I'd rather not commit something I can't test).


Phil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]