On Tuesday, July 07, 2009, at 11:03AM, "Paul Fenwick" 
<p...@perltraining.com.au> wrote:
>G'day Craig / All,
>
>Craig A. Berry wrote:
>
>> So likely we have an incompatible exit value on File::Copy, but I don't
>> know offhand why autodie cares about that.  Needs looking into.
>
>It doesn't *really* care, those tests are verifying that File::Copy returns
>what we expect, so that if any of the later tests fail, we know that
>something is wrong.
>
>However the documentation for File::Copy states for "RETURN":
>
>       All functions return 1 on success, 0 on failure.
>
>So it *should* be returning 0 if we're to be following what the docs say.
>
>I can patch autodie to skip this test on VMS, or we can patch File::Copy to
>return 0 rather than "" on failure.  I believe that cherry-picking
>079cb8cc5abf40c0b016f9f878493b4d192d85d3 into maint-5.10 should do this.

Aha.  On VMS, File::Copy::syscopy is aliased to File::Copy::rmscopy, which is 
implemented in XS at vms/vms.c:rmscopy_fromperl.  That's been returning 
PL_sv_no on failure and PL_sv_yes on success since the beginning of time, 
despite what the docs say.  Most likely people have depended on simple truth 
value and it hasn't made much difference.  But what I think needs doing is 
returning sv_2mortal(newSViv(0)) on failure and sv_2mortal(newSViv(1)) on 
success rather than the boolean brothers PL_sv_no and PL_sv_yes, but I'm no XS 
guru and it may be a day or so before I have time to test that theory.

Reply via email to