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]

Reply via email to