On Friday 26 November 2004 21:42 CET Sidney Markowitz wrote: > Malte S. Stretz wrote: > > So maybe we should add a M::SA::Util::get_home() which first > > tries $ENV{HOME}, then on Windows $ENV{HOMEDRIVE}\$ENV{HOMEDIR}, then > > portable_getpwuid()[7], then... foo? > > portable_getpwuid() doesn't seem to do anything useful under Windows for > this purpose and shouldn't be needed anyway. It just returns 'unknown' > for the name, which works when you don't care about the actual user name.
Yeah, noticed that, too. > The first two steps are fine, and probably enough, except that you would > not have to add the '\' separator, it is already in HOMEDIR. > > Question: In ArchiveIterator.pm does everything work if that is what it > uses for HOME or does anything have to be done to convert \ to / ? What do you think about the attached patch? Try it with perl -Ilib -MMail::SpamAssassin::Util \ -le 'print Mail::SpamAssassin::Util::get_home()' Cheers, Malte -- [SGT] Simon G. Tatham: "How to Report Bugs Effectively" <http://www.chiark.greenend.org.uk/~sgtatham/bugs.html> [ESR] Eric S. Raymond: "How To Ask Questions The Smart Way" <http://www.catb.org/~esr/faqs/smart-questions.html>
Index: Util.pm =================================================================== --- Util.pm (revision 106653) +++ Util.pm (working copy) @@ -535,6 +535,28 @@ ########################################################################### +{ + my $home; + + sub get_home { + return $home if defined $home; + + $home = $ENV{'HOMEx'}; + + unless ($home) { + if (!RUNNING_ON_WINDOWS) { + $home = (portable_getpwuid($<))[7]; + } else { + $home = File::Spec->catpath($ENV{'HOMEDRIVE'}, $ENV{'HOMEDIR'}); + } + } + + return $home || ''; + } +} + +########################################################################### + # Given a string, extract an IPv4 address from it. Required, since # we currently have no way to portably unmarshal an IPv4 address from # an IPv6 one without kludging elsewhere.