Mail Archives: djgpp-workers/2001/10/12/02:34:39
> From: sandmann AT clio DOT rice DOT edu (Charles Sandmann)
> Date: Thu, 11 Oct 2001 21:57:29 -0500 (CDT)
>
> W2K:
> short: TEST. long: test
> short: _67C0CVS. long: _.CVS
> Fixpath: c:/test/_.CVS
Good God!
> > _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.
>
> As you can see above, it botches 71A8h - it adds a period to the short
> name; but more interesting is the short value for _.CVS - I can't even
> explain that one.
A bug, I think. Perhaps you could try playing with 71A8h a bit. It
accepts several flags in the DX register, but my testing indicated
that some of the flags didn't work as documented. Maybe on XP, one of
these flags will produce a correct short name.
> Another good one:
>
> C:\BOOT>d:\fixpath config.sys
> Get dir[4]: \BOOT
> short: BOOT. long: BOOT
> short: CONFIGSY.S long: config.sys
> Fixpath: c:/BOOT/config.sys
Ah, that one rings a bell: it's possible that it's our bug. Due to
the bugs in the implementation of the flags in DX, my only way was to
tell 71A8h to return a file name in the FCB format, and then convert
it to a real file name by inserting the missing dot and removing the
padding blanks. For example, with config.sys, I expect to get the
string "CONFIG SYS", and then I convert it to "CONFIG.SYS".
It's possible that on XP, the ``FCB format'' is different, so the code
in _lfn_gen_short_fname which converts FCB to 8.3 doesn't work.
> So, since this function is hopeless on W2K/XP, ideas? It would be much
> faster to avoid all those useless interrupts ...
If we cannot find a way to fix this, I agree that we should simply
bypass those calls on XP and behave as if FNCASE were set to y.
- Raw text -