I've applied Charles Lane's three patches posted at
<http://www.crinoid.com/perl560.htmlx>
I applied them to 5.6.0 and built on DEC C 5.2, OpenVMS Alpha 7.1, -des
configure. During the build I got the following error:
MCR Sys$Disk:[]miniperl.exe "-I[.lib]" [.vms]gen_shrfls.pl -f gen_shrfls.opt
Fatal VMS error (status=114762) at DISK8:[BERRYC.PERL-5_6_0]VMS.C;2, line 5620 at
[.vms]gen_shrfls.pl line 59.
%RMS-E-DNF, directory not found
-NONAME-W-NOMSG, Message number 00000000
%MMK-F-ERRUPD, error status %X0001C04A occurred when updating target PERLSHR_XTRAS.TS
For some reason a return of RMS$_DNF is not considered to be in the ENOENT
family after calling sys$check_access in cando_by_name(). I'm pretty sure
it should be (in fact I have a distinct memory of patching this before, see
<http://www.xray.mpe.mpg.de/mailing-lists/vmsperl/2000-03/msg00218.html>).
I don't claim to understand the signal handling entirely, but the caller
probably checks for ENOENT and continues down its search list, but when it
gets an RMS error it gives up and croaks. As I said the last time, "the
code in vms.c appears to be trying to account for all the return values from
sys$check_access that translate to 'ain't no such thing.' However, dir not
found isn't in the list. This patch adds it; I wonder if that's what's
needed?":
--- vms/vms.c;-1 Mon Apr 17 17:18:53 2000
+++ vms/vms.c Mon Apr 17 17:23:10 2000
@@ -5592,11 +5592,11 @@
}
retsts = sys$check_access(&objtyp,&namdsc,&usrdsc,armlst);
if (retsts == SS$_NOPRIV || retsts == SS$_NOSUCHOBJECT ||
retsts == SS$_INVFILFOROP || retsts == RMS$_FNF || retsts == RMS$_SYN ||
- retsts == RMS$_DIR || retsts == RMS$_DEV) {
+ retsts == RMS$_DIR || retsts == RMS$_DNF || retsts == RMS$_DEV) {
set_vaxc_errno(retsts);
if (retsts == SS$_NOPRIV) set_errno(EACCES);
else if (retsts == SS$_INVFILFOROP) set_errno(EINVAL);
else set_errno(ENOENT);
return FALSE;
[End of patch.]
Starting with a clean extract from the tarball, I reapplied Charles's three
patches and mine. The configure and build went smoothly. The test suite
says that it passes all tests, but it may not be completely telling the
truth because I see the following error messages sprinkled in the test output:
[.lib]vmsfspec..........ok
%SYSTEM-F-ABORT, abort
%SYSTEM-F-ABORT, abort
[.lib]vmsish............ok
[.op]join...............ok
Can't find string terminator "]" anywhere before EOF at -e line 1.
Can't find string terminator "]" anywhere before EOF at -e line 1.
[.op]lex_assign.........ok
I haven't looked further at these yet but I note that they are also present
in the test log Charles has helpfully posted on crinoid.com.
I noticed when applying the vmspipe patch that the offsets were rather
large. This makes me wonder if I am missing 22 + 291 lines of important stuff:
patching file vms/vms.c
Hunk #2 succeeded at 919 (offset -22 lines).
Hunk #4 succeeded at 1038 (offset -22 lines).
Hunk #6 succeeded at 1097 (offset -22 lines).
Hunk #8 succeeded at 2034 (offset -22 lines).
Hunk #10 succeeded at 2121 (offset -22 lines).
Hunk #12 succeeded at 2157 (offset -22 lines).
Hunk #13 succeeded at 6164 (offset -291 lines).
Hope to look at this further tomorrow.
_______________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]