Re: File::Copy, autodie, VMS (was Re: maint-5.10-1531-ga5f97a6 on VMS status)

"Craig A. Berry" <[email protected]>
Newsgroups gmane.comp.lang.perl.perl5.porters,gmane.comp.lang.perl.ports.vms
Message-ID <[email protected]>
On Jul 7, 2009, at 3:24 PM, Craig Berry wrote:

> On Tuesday, July 07, 2009, at 11:03AM, "Paul Fenwick" <[email protected] 
> > 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.
>>
>>

>> 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,

Thanks, Paul.  That would be ok with me for 5.10.1, and I think would  
just mean adding a clause to the Windows skippage that's already there.

>> 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.

I tested that and it solves the hints.t test failure on VMS, so that's  
option #2.

> 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.


Looks like that theory was good and I've pushed a change that does  
what I described earlier.  So option #3 is to take <http://perl5.git.perl.org/perl.git/commitdiff/fd18815 
 > for maint.  As far as I can think of, that could only cause trouble  
for someone who had empirically determined and depended on the  
incorrect behavior of returning false but non-zero on failure.  This  
change needs to go in eventually since rmscopy is documented as having  
0 and 1 return values independent of the syscopy documentation, but  
it's a very old bug and I don't have that strong a preference of how  
this gets settled for 5.10.1.

Dave, let us know if there's anything else you want to see to resolve  
this for 5.10.1.

________________________________________
Craig A. Berry
mailto:[email protected]

"... getting out of a sonnet is much more
difficult than getting in."
                 Brad Leithauser
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.