Ken Williams wrote:
On Dec 6, 2005, at 11:46 AM, John E. Malmberg wrote:
Ken Williams wrote:
I was thinking we could add those as TODO tests, but I was unaware of
the problems with VAX legacy stuff.
There are some bugs that are in the legacy stuff that I am concerned if
I change the behavior, I could break things.
One of the things that has to be removed though is any routine that is
converting a file specification from VMS to UNIX format and then back to
VMS format. That only works about 95% of the time.
The remaining 5% of the time, it is broken. I am still working on
getting that fixed inside of vms.c.
I do not have examples handy of the broken behavior that I had
discovered, which was sloppy of me, because it took some time in some
cases to find out why a test was failing using ODS-5 disks.
Do you think the differences
between the two platforms are significant enough to merit a separate
File::Spec subclass for one of them?
The problem is that Perl on OpenVMS has been compensating for ODS-2 file
handling by converting "./xxx.xxx.xxx" to "[]xxx.xxx_xxx" and when you
are on an ODS-5 disk, it really should be "[]xxx^.xxx.xxx".
On 64 bit OpenVMS, for blead perl, if the logical name
"DECC$EFS_CHARSET" is enabled, vmsify() and unixify() follow ODS-5 rules.
This logical name can be read through $ENV{}. But really a better
control is needed.
These filenames will not show up on VAX at all. An issue though is what
a UNIX system should do with the File/Spec/VMS routines.
One way or another though, if we're going to add '^' processing on VMS
we'll need tests for it.
Canonpath() falls down hard with [.xxx^..yyy] which should pass through
unchanged as the unix equivalent is "xxx./yyy/".
I could not figure out how to fix that, which is the most common case.
That causes a lot of things to fail that would work now.
Proper functioning of lib/File/Spec/VMS.pm and CWD.pm require that
they know what mode that the OpenVMS CRTL is in for handling UNIX
format file specifications and ODS-5 extended character sets.
That sounds a little scary. What's a CRTL?
The CRTL is the shared library that provides all the standard functions
usually associated with C.
There are some feature controls that can be set to tell it to use newer
functionality. The defaults are set so that older programs will not
suddenly change behavior on a new file system.
Once the core modules in Perl where needed fully understand how to
interpret the feature controls, many Perl programs that are written for
UNIX only will be able to run on OpenVMS with out changes.
-John
[EMAIL PROTECTED]
Personal Opinion Only