On Wed, 18 Feb 2004, Stas Bekman wrote:
> Randy Kobes wrote:
> Thanks for testing, Randy
>
> >>+ for my $key (keys %conf_opts) {
> >>+ next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
> >>+ $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
[ ... ]
>
> ay, that's so incredibly <place your favorite swear word
> here>. there is no a core function that will take any
> given path and return a usable path?
>
> do you need to run this transform only if /\s/? What about
> long names (>8.3), don't they have short names too?
Yes, they do have short names. And it is a pain ... I should
have expanded - Win32::GetShortPathName() will return a
usable path if the file/directory physically exists - if a
conversion to 8.3 components is needed, then that is done,
otherwise, the original is returned. However, at this stage
I don't think (?) we can assume the file/directory yet
exists, at least for all the ones that this is being applied
to, so calling Win32::GetShortPathName on them will cause
the given values to be lost if they don't yet exist.
So, actually, I take that back about applying
Win32::GetSHortPathName($f) only if $f =~ /\s/, as that
was a red herring - doing it like
for my $key (keys %conf_opts) {
next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
next unless -e $conf_opts{$key};
$conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
should be OK when the entry (physically) exists, whether
that's a short or long name, and if it doesn't exist,
presumably it will either be created or tested for later.
One might have to do a Win32::GetShortPathName() if such an
entry does get created later on, but we could wait and see.
> For god's sake, can someone patch File::Spec to handle
> that win32 ridicule? Just think how much time every
> project wastes to deal with the same issues, again and
> again if they need to work with win32... not talking about
> making the source code cluttered with unneeded noise.
> that's just disgusting.
>
> Shouldn't canonfile() know how to deal with this
> GetShortPathName thingy?
I guess it could, but that would involve somewhat of a
departure from the philosophy of File::Spec. File::Spec can
handle any combination of files/directories, whether or not
they actually exist on the system, whereas things like
Win32::GetShortPathName() only makes sense for
files/directories that physically exist. So incorporating
the short path name stuff in File::Spec would lead to a
branch in what gets returned, depending on whether or not
the entry physically exists.
> /of course none of these "flattering" comments are
> directed at Randy and other brave and helpful folks ;)/
:)
--
best regards,
randy