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