At 11:29 AM -0600 2/3/05, John E. Malmberg wrote:
>On Wed, 2 Feb 2005, Craig A. Berry wrote:
>
>> At 2:41 PM -0600 2/2/05, John E. Malmberg wrote:
>> >I notice that Perl is checking if the stat is being done on the NULL
>> >device, and generating a fake stat structure.
>> >
>> >stat() should return the correct information from either a filespec of
>> >"NLA0:" or "NL:" or even "/dev/null"
>>
>> Sure, on recent versions of VMS.  I'd be reluctant to break older
>> versions, at least without knowing exactly which ones I was breaking
>> so I could document it.
>
>It may more be a case of only conditionally compiling the code in for
>versions of VMS older than what it is know to work for.

Yes, that would be great to cut out the cruft conditionally. I
suspect 7.0 or thereabouts is where this got fixed.  I can test back
to 7.1.

>Any idea what the oldest version of VMS that the current release of
>Perl will still build on?  HP/COMPAQ/DECC is avaialable in one flavor
>or another back to OpenVMS 5.5-2.

I would not be surprised if we could still build pretty easiliy on
6.x and even 5.5 with a little work.  There would be many test
failures as extensions now bundled with the core make assumptions
that weren't true 10 years ago.  A recent only a small handful of
test failures on an unpatched Alpha v7.1, which is pretty good
considering that something like seven or eight years old now.

>With OpenVMS 8.2 and when using the standard compliant stat structure,
>the code handling the NULL device is producing the wrong answer.

Go ahead and conditionalize it out when __CRTL_VER is older than the
earliest version you can easily test with or find documented in CRTL
ECOs: 7.2, 7.3, or whatever.  If we can move the version number
back at some point, so much the better, but not a priority since the
workaround does work on all pre-8.2 versions as far as I know.

>In looking at what it would take to use the standard stat structure in
>Perl, the only stumbling block I am seeing is the routine Perl_cando().
>
>With the standard compliant stat, there is no pointer to the device name,
>instead a unique 64 bit number for the st_dev member is returned, and
>I am currently ignorant of anyway to use that to determine the real device
>name as Perl_cando() needs.
>
>Until that is resolved, building Perl with _USE_STD_STAT will not work
>right.

Ah, good, we can also conditionalize out the encode_dev() hack, which
has served us well for years but shouldn't be necessary with the new
stat structure if I understand what you are saying.  The reason that
Perl_cando() uses the device name from the stat structure is that
lib$fid_to_name returns a device name that may not be up to snuff.
For example, it will return DISK$USER as the device name if the
volume label is USER even if DISK$USER has been overriden by an outer
mode logical.  I'm not sure if that helps, and I'm not sure what to
suggest about st_devnam.

>And with the _LARGEFILE option, mystat might as well use __ino64_t for
>the ino_type and not use the rvn and fill members.


Hmm.  I'll try to look at that sometime.  Is that only when
_USE_STD_STAT is in effect, or regardless?

>
>Also, the dbgminiperl.exe is not being LINKED/DEBUG, should it be?
>Now I have to use LINK/DEBUG before running the build.

What do you see when you do

$ search config.sh vmsdebug
config_args='-"Dusedevel" -"Dusevmsdebug" -"des"'
usevmsdebug='define'

in your top-level build directory?  If you didn't configure for the
debugger but just passed the __DEBUG__ macro to MMS, that may explain
what you are seeing (maybe not, but that's the first thing I'd check).
-- 
________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]

"... getting out of a sonnet is much more
 difficult than getting in."
                 Brad Leithauser

Reply via email to