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.
Why not? All these arguments should be existing. (I think sans -libmodperl which may not 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.
cool. In any case, please take the ownership of the patch I posted and once you guys are happy with it, please go ahead and commit it. Otherwise it's a broken phone. Thanks.
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.
before you implement this ;) what would you expect canonfile to do under win32? is GetShortPathName is the thing you'd expect? As it will always work?
BTW, does it make sure that two similar long names will never collapse into one short name? Meaning that the short name is not deterministic but depends on other the existence of other files with similar names? If it was deterministic, you could go and create the non-existing file, get its short name and delete the file, no?
__________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com