At 3:15 PM -0400 8/26/06, John E. Malmberg wrote:
>Craig A. Berry wrote:
>>In [.vms]vms.c, do_tounixspec(), we now convert sys$scratch to tmp
>>using the code below. This breaks things that convert to unix specs
>>for convenience and then convert back to VMS specs. Such as:
>>
>>$ perldoc -f opendir
>>Error in tempfile() using tmp:XXXXXXXXXX: Could not create temp file
>>tmp:x8rVYNDDzE: no such device or address at /perl_root/lib/Pod/Perldoc.
>>pm line 1507
>>%SYSTEM-F-ABORT, abort
>>
>>There is no "tmp:" device so you can't create a temporary file there.
>>So, I'm curious, since /sys$scratch is just as valid a unix fiile
>>spec as /tmp, why replace it?
>
>Good question.
>
>Under normal conditions CRTL will internally translate /tmp to SYS$SCRATCH: if
>the logical name "TMP:" does not exist.
>
>Since Perl sometimes uses the CRTL translations, and sometimes uses it's own,
>the UNIX to VMS translation needs to also do this, or we end up with parts of
>Perl translating UNIX file specifications to VMS differently.
>
>So /tmp/XXXXXXXX should work.
>
>But the CRTL does not do the reverse translation, which will break tests that
>assume that vmsify() will reverse a unixify().
Well, maybe Perl should do the reverse translation, turning /tmp into
sys$scratch: when no tmp logical exists.
>
>Anything that is converting a VMS format specification to a UNIX specification
>and then reversing it, is going to be broken for a number of VMS file
>specifications. One of the things that I am working on is removing all those
>double translation cases from the core modules, and updating the documentation
>for vmsify and unixify as to why.
>
>I am also trying to make sure that most of the common cases of
>"vmsify(unixify($foo)) == $foo" and "unixify(vmsify($foo)) == $foo" work,
>because the incorrect assumption that this can be done is so prevalent. These
>problems especially show up when the EFS character set is enabled.
>
>It appears here that something in Perldoc translated a VMS specification to
>UNIX, and then tried to treat portions of the UNIX specification as VMS format
>instead of keeping the file specification in UNIX format. That will only work
>with a subset of UNIX file specifications.
>
>Most likely the vms specific code that is causing this problem could/should
>simply be removed.
Well, here's the culprit:
$ perl -"MFile::Spec" -e "print File::Spec->eliminate_macros('sys$scratch:');"
/tmp/
Ditto with the MakeMaker version, which is now supposed to be the
authoritative version of eliminate_macros:
$ perl -"MExtUtils::MakeMaker" -e "print MM->eliminate_macros('sys$scratch:');"
/tmp/
Lots of things will break in MakeMaker if we simply remove
eliminate_macros. Whether it still needs to be called from catdir
and catpath in File::Spec is worth investigating. On the surface,
there should be no general reason to expand Makefile macros when not
generating a Makefile, but there may be other normalization features
of eliminate_macros that we've come to depend on. And even more
likely, there may be cases where MakeMaker calls catdir and catfile
and assumes that macros have been expanded.
>
>As of VMS 8.3, /tmp could be:
>
>"^UP^/tmp"
>tmp:
>sys$scratch:
>sys$posix_root:[tmp]
>
>All depending on how the C feature logicals, the POSIX root, or the logical
>names tmp or sys$posix_root are defined.
>
>Consider also the cases are that "./foo" is sometimes "[]foo.*" where * is
>based on the context of it being used by a VMS utility and other times it is
>simply "[]foo." where sometimes the trailing "." is significant.
>
>And "[]foo." needs to be translated to "./foo". "./foo." translates to
>"[]foo^..".
We clearly need lots and lots of test cases.
--
________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]
"... getting out of a sonnet is much more
difficult than getting in."
Brad Leithauser