On Wed, Aug 07, 2013 at 10:03:17PM -0500, Craig A. Berry wrote:
> 
> On Aug 7, 2013, at 12:23 PM, Nicholas Clark <n...@ccl4.org> wrote:
> 
> > I have this commit pushed to a smoke-me branch. It doesn't cause any test
> > failures on the HP VMS testdrive system. Am I making bad assumptions?
> > 
> > Specifically, is it filesystem dependant whether this code as-is will pass?
> > 
> >    open(H,'run/fresh_perl.t'); # must be in the 't' directory
> >    stat(H);
> >    print "ok\n" if (-e _ and -f _ and -r _);
> > 
> 
> I can't think of any reason that would be different on different filesystems.

OK, good. I wasn't totally sure, and wanted to avoid making a mistake that
caused someone else more work.

> > I infer that it must have failed 12 years ago, because the last line was
> > "corrected" to
> > 
> >    print "ok\n" if (-e _ and -f _);
> > 
> > 
> > But what changed to cause it to work now?
> > 
> 
> There have been various fixes to stat as well as to Perl_cando_by_name in 
> vms/vms.c.  None I've managed to stumble on in the archives pops out as 
> obviously "the one," and it would be arduous to do a manual bisect without 
> git.

OK. I was curious if it was obvious to someone else, and it's not.

> > commit 219b23a016e4d19b9fc29d2cb6aad7c8f485e7bc
> > Author: Nicholas Clark <n...@ccl4.org>
> > Date:   Wed Aug 7 11:57:09 2013 +0200

> >     open TEST, ">$tmpfile" or die "Cannot open $tmpfile: $!";
> > -
> > -    # VMS adjustments
> > -    if( $is_vms ) {
> > -        $prog =~ s#/dev/null#NL:#;
> > -
> > -        # VMS file locking
> > -        $prog =~ s{if \(-e _ and -f _ and -r _\)}
> > -                  {if (-e _ and -f _)}
> > -    }
> > -
> >     print TEST $prog;
> >     close TEST or die "Cannot close $tmpfile: $!";
> > 
> 
> I think these changes are sane.  Once upon a time, the CRTL did not support 
> /dev/null as an alias for the native _NLA0:.  I forget when /dev/null became 
> supported; possibly v7.0, which was about 1995 or so.  I remember Chuck Lane, 
> who wrote the misc.t patch, saying at some point that he was running v6.2, 
> which was already somewhat old at the time.  I explicitly removed support for 
> pre-7.0 VMS systems in Perl 5.16.x, so the /dev/null workaround seems safe to 
> remove.
> 
> I think I disagree about whether these belonged in the test runner; that 
> actually was the general place to solve a general problem, even if there 
> weren't other extant tests that exercised the problem.  But those problems 
> don't seem to be there now, so thanks for cleaning up after us.

Yes, to be fair I'm in two minds about the /dev/null one, as it might show
up in other places. But it was bugging me that it's only VMS - surely other
platforms need similar fixes? But as George Greer observed, Win32 has a
special case:

DllExport FILE *
win32_freopen(const char *path, const char *mode, FILE *stream)
{
    dTHXa(NULL);
    if (stricmp(path, "/dev/null")==0)
        path = "NUL";

    aTHXa(PERL_GET_THX);
    return freopen(PerlDir_mapA(path), mode, stream);
}


(and similar code in 2 other places)

But I think that the pattern match for qr/if \(-e _ and -f _ and -r _\)/ was
so specific that it was only ever going to match one test.

Nicholas Clark

Reply via email to