Mail Archives: djgpp-workers/2001/10/11/18:52:23
> From: "Tim Van Holder" <tim DOT van DOT holder AT pandora DOT be>
> Date: Thu, 11 Oct 2001 22:25:34 +0200
>
> Oh, and I did notice that perl's configure got the names of
> ALL extensions right by itself. Normally it finds the B,
> I18N and IO packages as b, i18n and io (which is why Laszlo
> added a config.over to set those right again). So it seems
> that under XP, FNCASE=y is always in effect (or something
> like that anyway).
For that to happen, XP has somehow to mess with a particular LFN
function of Int 21h (assuming you didn't somehow set FNCASE=y and
forgot about it ;-). Here are the details.
The library functions which need to decide whether to downcase a file
name they've got from the OS all run code similar to this:
if (!strcmp(_lfn_gen_short_fname(long_name, short_name), long_name))
/* downcase the file name */
The function _lfn_gen_short_fname puts into its second argument the
short variant of the file name in its first argument. The short
variant is the 8+3 alias, but without the numeric tail, i.e. as if
NameNumericTail was set to zero. If these two strings are identical
(including the case!), then we decide that this is a DOS file name,
and downcase it. (If FNCASE is set to y, this code is bypassed, and
all file names are returned exactly as they are recorded in the
directory.)
_lfn_gen_short_fname calls function 71A8h of Int 21h. So either XP
botches that function, or it returns some unexpected result that
confuses the logic inside _lfn_gen_short_fname. Please step with a
debugger into that function and see what's going on there.
- Raw text -