Bug 1077099: Set mGREBinDir in nsXREDirProvider::Initialize to avoid returning NULL in nsXREDirProvider::GetGREBinDir. r=bsmedberg

This commit is contained in:
Stephen Pohl
2014-10-10 15:06:50 -04:00
parent 57ece49420
commit 4010e18bde
2 changed files with 19 additions and 9 deletions

View File

@@ -62,11 +62,13 @@ public:
XPCShellDirProvider() { }
~XPCShellDirProvider() { }
bool SetGREDir(const char *dir);
void ClearGREDir() { mGREDir = nullptr; }
bool SetGREDirs(const char *dir);
void ClearGREDirs() { mGREDir = nullptr;
mGREBinDir = nullptr; }
private:
nsCOMPtr<nsIFile> mGREDir;
nsCOMPtr<nsIFile> mGREBinDir;
};
inline XPCShellEnvironment*
@@ -411,9 +413,15 @@ XPCShellDirProvider::Release()
NS_IMPL_QUERY_INTERFACE(XPCShellDirProvider, nsIDirectoryServiceProvider)
bool
XPCShellDirProvider::SetGREDir(const char *dir)
XPCShellDirProvider::SetGREDirs(const char *dir)
{
nsresult rv = XRE_GetFileFromPath(dir, getter_AddRefs(mGREDir));
if (NS_SUCCEEDED(rv)) {
mGREDir->Clone(getter_AddRefs(mGREBinDir));
#ifdef XP_MACOSX
mGREBinDir->SetNativeLeafName(NS_LITERAL_CSTRING("MacOS"));
#endif
}
return NS_SUCCEEDED(rv);
}
@@ -426,6 +434,10 @@ XPCShellDirProvider::GetFile(const char *prop,
*persistent = true;
NS_ADDREF(*result = mGREDir);
return NS_OK;
} else if (mGREBinDir && !strcmp(prop, NS_GRE_BIN_DIR)) {
*persistent = true;
NS_ADDREF(*result = mGREBinDir);
return NS_OK;
}
return NS_ERROR_FAILURE;