diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2017-12-20 22:51:26 -0500 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2017-12-20 22:51:26 -0500 |
commit | 5002bf5660f41685fc0549880994f4b35440d535 (patch) | |
tree | 9eee598eb855757a9d6909408f0d04101b83c8ab /indra/llvfs/lldir.cpp | |
parent | 36e5f543ced86ce1d976c0740fe04bc36475fbaf (diff) |
MAINT-8087: Use env vars from VMP for AppData\Roaming and Local.
On Windows, when logged in with a non-ASCII username, every one of the three
documented APIs -- SHGetSpecialFolderPath(), SHGetFolderPath() and
SHGetKnownFolderPath() -- fails to retrieve any pathname at all. We cannot
account for the fact that the oldest of these continues to work with the
release viewer and within a Python script (though not, curiously, from a
Python interactive session). With a non-ASCII username, they consistently fail
when called from an Alex Ivy viewer build: "The filename, directory name, or
volume label syntax is incorrect."
Empirically, with a non-ASCII username, the preset APPDATA and LOCALAPPDATA
environment variables are also useless, e.g. c:\Users\??????\AppData\Roaming
where those are, yup, actual question marks.
Empirically, the VMP is able to successfully call SHGetFolderPath() to
retrieve both AppData\Roaming and AppData\Local. Therefore, we make the VMP
set the APPDATA and LOCALAPPDATA environment variables to the UTF-8 encoded
correct pathnames. Instead of calling SHGetSomethingFolderPath() at all, make
LLDir_Win32 retrieve those environment variables.
Make LLFile::mkdir() treat "directory already exists" as a success case. Every
single call fell into one of two categories: either it didn't check success at
all, or it tested specially to exempt errno == EEXIST. Migrate that test into
mkdir(); eliminate it from call sites.
Make LLDir::append() and add() convenience functions accept variadic
arguments. Replace add(add()...) constructs, as well as clumsy concatenations
of directory names and getDirDelimiter(), with simple variadic add() calls.
Diffstat (limited to 'indra/llvfs/lldir.cpp')
-rw-r--r-- | indra/llvfs/lldir.cpp | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index b845de71fa..2069888774 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -597,7 +597,7 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd << "': prefix is empty, possible bad filename" << LL_ENDL; } - std::string expanded_filename = add(add(prefix, subdir1), subdir2); + std::string expanded_filename = add(prefix, subdir1, subdir2); if (expanded_filename.empty() && in_filename.empty()) { return ""; @@ -693,7 +693,7 @@ void LLDir::walkSearchSkinDirs(const std::string& subdir, std::string subdir_path(add(skindir, subdir)); BOOST_FOREACH(std::string subsubdir, subsubdirs) { - std::string full_path(add(add(subdir_path, subsubdir), filename)); + std::string full_path(add(subdir_path, subsubdir, filename)); if (fileExists(full_path)) { function(subsubdir, full_path); @@ -1052,13 +1052,6 @@ void LLDir::dumpCurrentDirectories() LL_DEBUGS("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL; } -std::string LLDir::add(const std::string& path, const std::string& name) const -{ - std::string destpath(path); - append(destpath, name); - return destpath; -} - void LLDir::append(std::string& destpath, const std::string& name) const { // Delegate question of whether we need a separator to helper method. |