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