New wstring nsIRegistry interface, bug 23859;

new version registry name for mozilla, bug 10533;
log now created by install wizards too, bug 26309;
downloaded file cleanup moved into manager, bug 24249;
scaffolding for bug 12817 and 12361 (conditional autoreg)


git-svn-id: svn://10.0.0.236/trunk@60771 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dveditz%netscape.com 2000-02-15 01:32:12 +00:00
parent 43b3ef4c23
commit 121072fe86
38 changed files with 475 additions and 186 deletions

View File

@ -334,56 +334,56 @@ nsCharDetModule::RegisterSelf(nsIComponentManager *aCompMgr,
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "off" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "off");
rv = registry-> SetString(key, "defaultEnglishText", "Off");
rv = registry-> SetStringUTF8(key, "type", "off");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Off");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "japsm" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "japsm");
rv = registry-> SetString(key, "defaultEnglishText", "Japanese");
rv = registry-> SetStringUTF8(key, "type", "japsm");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Japanese");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "kopsm" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "kopsm");
rv = registry-> SetString(key, "defaultEnglishText", "Korean");
rv = registry-> SetStringUTF8(key, "type", "kopsm");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Korean");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "zhtwpsm" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "zhtwpsm");
rv = registry-> SetString(key, "defaultEnglishText", "Traditional Chinese");
rv = registry-> SetStringUTF8(key, "type", "zhtwpsm");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Traditional Chinese");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "zhcnpsm" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "zhtwpsm");
rv = registry-> SetString(key, "defaultEnglishText", "Simplified Chinese");
rv = registry-> SetStringUTF8(key, "type", "zhtwpsm");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Simplified Chinese");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "zhpsm" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "zhpsm");
rv = registry-> SetString(key, "defaultEnglishText", "Chinese");
rv = registry-> SetStringUTF8(key, "type", "zhpsm");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Chinese");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "cjkpsm" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "cjkpsm");
rv = registry-> SetString(key, "defaultEnglishText", "East Asian");
rv = registry-> SetStringUTF8(key, "type", "cjkpsm");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "East Asian");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "ruprob" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "ruprob");
rv = registry-> SetString(key, "defaultEnglishText", "Russian");
rv = registry-> SetStringUTF8(key, "type", "ruprob");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Russian");
}
rv = registry -> AddSubtree(nsIRegistry::Common,
NS_CHARSET_DETECTOR_REG_BASE "ukprob" ,&key);
if (NS_SUCCEEDED(rv)) {
rv = registry-> SetString(key, "type", "ukprob");
rv = registry-> SetString(key, "defaultEnglishText", "Ukrainian");
rv = registry-> SetStringUTF8(key, "type", "ukprob");
rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Ukrainian");
}
done:

View File

@ -406,7 +406,7 @@ nsExtensibleStringBundle::nsExtensibleStringBundle(const char * aRegistryKey,
res = node->GetKey(&key);
if (NS_FAILED(res)) goto done1;
res = registry->GetString(key, "name", &name);
res = registry->GetStringUTF8(key, "name", &name);
if (NS_FAILED(res)) goto done1;
res = sbServ->CreateBundle(name, aLocale, &bundle);

View File

@ -78,10 +78,10 @@ nsUConverterRegSelf( const char* aFromCharset, \
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); \
if (NS_FAILED(res)) \
goto done; \
res = registry -> SetString(key, "source", aFromCharset); \
res = registry -> SetStringUTF8(key, "source", aFromCharset); \
if (NS_FAILED(res)) \
goto done; \
res = registry -> SetString(key, "destination", aToCharset); \
res = registry -> SetStringUTF8(key, "destination", aToCharset); \
if (NS_FAILED(res)) \
goto done; \
printf("RegSelf %s to %s converter complete\n", \

View File

@ -228,7 +228,7 @@ nsresult nsCharsetConverterManager::RegisterConverterTitles(
res = aRegistry->AddSubtree(nsIRegistry::Common, p, &key);
nsAllocator::Free(p);
if (NS_FAILED(res)) return res;
res = aRegistry->SetString(key, "name", "resource:/res/charsetTitles.properties");
res = aRegistry->SetStringUTF8(key, "name", "resource:/res/charsetTitles.properties");
if (NS_FAILED(res)) return res;
return NS_OK;
@ -248,7 +248,7 @@ nsresult nsCharsetConverterManager::RegisterConverterData(
res = aRegistry->AddSubtree(nsIRegistry::Common, p, &key);
nsAllocator::Free(p);
if (NS_FAILED(res)) return res;
res = aRegistry->SetString(key, "name", "resource:/res/charsetData.properties");
res = aRegistry->SetStringUTF8(key, "name", "resource:/res/charsetData.properties");
if (NS_FAILED(res)) return res;
return NS_OK;
@ -314,10 +314,10 @@ void nsCharsetConverterManager::FillInfoArrays()
res = node->GetKey(&key);
if (NS_FAILED(res)) goto done1;
res = registry->GetString(key, "source", &src);
res = registry->GetStringUTF8(key, "source", &src);
if (NS_FAILED(res)) goto done1;
res = registry->GetString(key, "destination", &dest);
res = registry->GetStringUTF8(key, "destination", &dest);
if (NS_FAILED(res)) goto done1;
// XXX do an alias resolution here instead

View File

@ -397,9 +397,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsCRT::free(cid_string);
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc);
res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest);
res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest);
if (NS_FAILED(res)) goto done;
}

View File

@ -419,9 +419,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsCRT::free(cid_string);
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc);
res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest);
res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest);
if (NS_FAILED(res)) goto done;
}

View File

@ -431,9 +431,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsCRT::free(cid_string);
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc);
res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest);
res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest);
if (NS_FAILED(res)) goto done;
}

View File

@ -365,9 +365,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsCRT::free(cid_string);
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc);
res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest);
res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest);
if (NS_FAILED(res)) goto done;
}

View File

@ -1060,9 +1060,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsCRT::free(cid_string);
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc);
res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest);
res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest);
if (NS_FAILED(res)) goto done;
}

View File

@ -445,9 +445,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsCRT::free(cid_string);
res = registry -> AddSubtree(nsIRegistry::Common, buff, &key);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc);
res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc);
if (NS_FAILED(res)) goto done;
res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest);
res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest);
if (NS_FAILED(res)) goto done;
}

View File

@ -56,10 +56,10 @@
#define MAC_REG "\pMozilla Registry"
#define BEOS_REG "/mozilla/registry"
#define DEF_VERREG "/.netscape/registry"
#define WIN_VERREG "\\nsreg.dat"
#define MAC_VERREG "\pNetscape Registry"
#define BEOS_VERREG "/mozilla/registry"
#define DEF_VERREG "/.mozilla/mozver.dat"
#define WIN_VERREG "\\mozver.dat"
#define MAC_VERREG "\pMozilla Versions"
#define BEOS_VERREG "/mozilla/mozver.dat"
/* ------------------------------------------------------------------

View File

@ -36,15 +36,21 @@ interface nsIRegistry : nsISupports
const long ApplicationCustomRegistry = -1;
void open(in string regFile);
void openWellKnownRegistry(in long regid);
// Deprecated
void openDefault();
void close();
void openWellKnownRegistry(in nsWellKnownRegistry regid);
void flush();
boolean isOpen();
string getString(in nsRegistryKey baseKey, in string path);
void setString(in nsRegistryKey baseKey, in string path, in string value);
nsRegistryKey addKey(in nsRegistryKey baseKey, in wstring keyname);
nsRegistryKey getKey(in nsRegistryKey baseKey, in wstring keyname);
void removeKey(in nsRegistryKey baseKey, in wstring keyname);
wstring getString(in nsRegistryKey baseKey, in wstring valname);
void setString(in nsRegistryKey baseKey, in wstring valname, in wstring value);
string getStringUTF8(in nsRegistryKey baseKey, in string path);
void setStringUTF8(in nsRegistryKey baseKey, in string path, in string value);
PRInt32 getInt(in nsRegistryKey baseKey, in string path);
void setInt(in nsRegistryKey baseKey, in string path, in PRInt32 value);
PRInt64 getLongLong(in nsRegistryKey baseKey, in string path);

View File

@ -33,6 +33,8 @@
#include "nsCOMPtr.h"
#include "nsILocalFile.h"
#include "nsIServiceManager.h"
#include "nsTextFormatter.h"
/* extra locking for the paranoid */
/* #define EXTRA_THREADSAFE */
#ifndef EXTRA_THREADSAFE
@ -73,6 +75,8 @@ protected:
#endif
char *mCurRegFile; // these are to prevent open from opening the registry again
nsWellKnownRegistry mCurRegID;
NS_IMETHOD Close();
}; // nsRegistry
@ -482,6 +486,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) {
return regerr2nsresult( err );
}
#if 0
/*-------------------------- nsRegistry::OpenDefault ---------------------------
| Open the "default" registry; in the case of this libreg-based implementation |
| that is done by passing a null file name pointer to NR_RegOpen. |
@ -489,6 +494,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) {
NS_IMETHODIMP nsRegistry::OpenDefault() {
return OpenWellKnownRegistry(nsIRegistry::ApplicationRegistry);
}
#endif
/*----------------------------- nsRegistry::Close ------------------------------
| Tests the mReg handle and if non-null, closes the registry via NR_RegClose. |
@ -530,11 +536,122 @@ NS_IMETHODIMP nsRegistry::IsOpen( PRBool *result ) {
}
/*--------------------------- nsRegistry::AddKey -------------------------------
| Add a key into the registry or find an existing one. This is generally used |
| instead of GetKey unless it's an error for the key not to exist already i
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::AddKey( nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval)
{
if ( !keyname )
return NS_ERROR_NULL_POINTER;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = AddSubtree( baseKey, utf8name, _retval );
Recycle( utf8name );
return rv;
}
/*--------------------------- nsRegistry::GetKey -------------------------------
| returns the nsRegistryKey associated with a given node in the registry |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::GetKey(nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval)
{
if ( !keyname || !_retval )
return NS_ERROR_NULL_POINTER;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = GetSubtree( baseKey, utf8name, _retval );
Recycle( utf8name );
return rv;
}
/*--------------------------- nsRegistry::RemoveKey ----------------------------
| Delete a key from the registry |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::RemoveKey(nsRegistryKey baseKey, const PRUnichar *keyname)
{
if ( !keyname )
return NS_ERROR_NULL_POINTER;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = RemoveSubtree( baseKey, utf8name );
Recycle( utf8name );
return rv;
}
NS_IMETHODIMP nsRegistry::GetString(nsRegistryKey baseKey, const PRUnichar *valname, PRUnichar **_retval)
{
nsresult rv = NS_OK;
// Make sure caller gave us place for result.
if ( !valname || !_retval )
return NS_ERROR_NULL_POINTER;
// initialize the return value
*_retval = nsnull;
char *tmpstr = nsnull;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
rv = GetStringUTF8( baseKey, utf8name, &tmpstr );
if (NS_SUCCEEDED(rv))
{
*_retval = nsTextFormatter::smprintf( L"%s", tmpstr );
nsCRT::free(tmpstr);
if ( *_retval == nsnull )
rv = NS_ERROR_OUT_OF_MEMORY;
}
Recycle( utf8name );
return rv;
}
NS_IMETHODIMP nsRegistry::SetString(nsRegistryKey baseKey, const PRUnichar *valname, const PRUnichar *value)
{
if ( !valname || ! value )
return NS_ERROR_NULL_POINTER;
nsresult rv = NS_OK;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) );
nsString val( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,value), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
char* utf8val = val.ToNewUTF8String();
if ( utf8name && utf8val )
rv = SetStringUTF8( baseKey, utf8name, utf8val );
else
rv = NS_ERROR_OUT_OF_MEMORY;
if ( utf8name ) Recycle(utf8name);
if ( utf8val ) Recycle(utf8val);
return rv;
}
/*--------------------------- nsRegistry::GetString ----------------------------
| First, look for the entry using GetValueInfo. If found, and it's a string, |
| allocate space for it and fetch the value. |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, char **result ) {
NS_IMETHODIMP nsRegistry::GetStringUTF8( nsRegistryKey baseKey, const char *path, char **result ) {
nsresult rv = NS_OK;
REGERR err = REGERR_OK;
@ -601,7 +718,7 @@ NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, ch
/*--------------------------- nsRegistry::SetString ----------------------------
| Simply sets the registry contents using NR_RegSetEntryString. |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::SetString( nsRegistryKey baseKey, const char *path, const char *value ) {
NS_IMETHODIMP nsRegistry::SetStringUTF8( nsRegistryKey baseKey, const char *path, const char *value ) {
REGERR err = REGERR_OK;
// Set the contents.
PR_Lock(mregLock);

View File

@ -249,7 +249,7 @@ main(int argc, char* argv[])
rv = registry->AddSubtreeRaw(key, "?from=t/foo?to=k/foo", &key1);
if (NS_FAILED(rv)) return rv;
registry->Close();
registry = 0; // close the registry
NS_WITH_SERVICE(nsIStreamConverterService, StreamConvService, kStreamConverterServiceCID, &rv);
if (NS_FAILED(rv)) return rv;

View File

@ -99,10 +99,6 @@ nsProfileAccess::~nsProfileAccess()
PRBool openalready = PR_FALSE;
m_registry->IsOpen( &openalready);
if (openalready)
m_registry->Close();
// Release all resources.
CRTFREEIF(mCurrentProfile);
CRTFREEIF(mVersion);
@ -133,11 +129,8 @@ nsProfileAccess::FreeProfileMembers(nsVoidArray *profiles, PRInt32 numElems)
nsresult
nsProfileAccess::CloseRegistry()
{
nsresult rv = NS_OK;
rv = m_registry->Close();
return rv;
m_registry = 0;
return NS_OK;
}
// Open the registry.
@ -163,7 +156,7 @@ nsProfileAccess::OpenRegistry()
if (NS_FAILED(rv)) return rv;
if (!openalready)
rv = m_registry->OpenDefault();
rv = m_registry->OpenWellKnownRegistry(nsIRegistry::ApplicationRegistry);
return rv;
}
@ -329,10 +322,10 @@ nsProfileAccess::FillProfileInfo()
}
// Get the current profile
rv = m_registry->GetString(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, &mCurrentProfile);
rv = m_registry->GetStringUTF8(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, &mCurrentProfile);
// Get the profile version
rv = m_registry->GetString(profilesTreeKey, REGISTRY_VERSION_STRING, &mVersion);
rv = m_registry->GetStringUTF8(profilesTreeKey, REGISTRY_VERSION_STRING, &mVersion);
if (mVersion == nsnull)
{
@ -342,7 +335,7 @@ nsProfileAccess::FillProfileInfo()
}
// Get the preg info
rv = m_registry->GetString(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, &mHavePREGInfo);
rv = m_registry->GetStringUTF8(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, &mHavePREGInfo);
if (mHavePREGInfo == nsnull)
{
@ -393,19 +386,19 @@ nsProfileAccess::FillProfileInfo()
rv = m_registry->GetSubtree(profilesTreeKey, profile, &profKey);
if (NS_FAILED(rv)) return rv;
rv = m_registry->GetString(profKey, REGISTRY_DIRECTORY_STRING, &directory);
rv = m_registry->GetStringUTF8(profKey, REGISTRY_DIRECTORY_STRING, &directory);
if (NS_FAILED(rv)) return rv;
if (mFixRegEntries)
FixRegEntry(&directory);
rv = m_registry->GetString(profKey, REGISTRY_MIGRATED_STRING, getter_Copies(isMigrated));
rv = m_registry->GetStringUTF8(profKey, REGISTRY_MIGRATED_STRING, getter_Copies(isMigrated));
if (NS_FAILED(rv)) return rv;
rv = m_registry->GetString(profKey, REGISTRY_NC_PROFILE_NAME_STRING, getter_Copies(NCProfileName));
rv = m_registry->GetString(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, getter_Copies(NCDeniedService));
rv = m_registry->GetString(profKey, REGISTRY_NC_USER_EMAIL_STRING, getter_Copies(NCEmailAddress));
rv = m_registry->GetString(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, getter_Copies(NCHavePregInfo));
rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_PROFILE_NAME_STRING, getter_Copies(NCProfileName));
rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, getter_Copies(NCDeniedService));
rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_USER_EMAIL_STRING, getter_Copies(NCEmailAddress));
rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, getter_Copies(NCHavePregInfo));
ProfileStruct* profileItem = new ProfileStruct();
if (!profileItem)
@ -663,15 +656,15 @@ nsProfileAccess::UpdateRegistry()
if (NS_FAILED(rv)) return rv;
// Set the current profile
rv = m_registry->SetString(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, mCurrentProfile);
rv = m_registry->SetStringUTF8(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, mCurrentProfile);
if (NS_FAILED(rv)) return rv;
// Set the registry version
rv = m_registry->SetString(profilesTreeKey, REGISTRY_VERSION_STRING, mVersion);
rv = m_registry->SetStringUTF8(profilesTreeKey, REGISTRY_VERSION_STRING, mVersion);
if (NS_FAILED(rv)) return rv;
// Set preg info
rv = m_registry->SetString(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, mHavePREGInfo);
rv = m_registry->SetStringUTF8(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, mHavePREGInfo);
if (NS_FAILED(rv)) return rv;
rv = m_registry->EnumerateSubtrees(profilesTreeKey, getter_AddRefs(enumKeys));
@ -721,16 +714,16 @@ nsProfileAccess::UpdateRegistry()
rv = m_registry->GetSubtree(profilesTreeKey, profile, &profKey);
if (NS_FAILED(rv)) return rv;
rv = m_registry->SetString(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation);
if (NS_FAILED(rv)) return rv;
rv = m_registry->SetString(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated);
if (NS_FAILED(rv)) return rv;
rv = m_registry->SetString(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName);
rv = m_registry->SetString(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService);
rv = m_registry->SetString(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress);
rv = m_registry->SetString(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo);
profileItem->updateProfileEntry = PR_FALSE;
}
@ -749,16 +742,16 @@ nsProfileAccess::UpdateRegistry()
rv = m_registry->AddSubtree(profilesTreeKey, profileItem->profileName, &profKey);
if (NS_FAILED(rv)) return rv;
rv = m_registry->SetString(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation);
if (NS_FAILED(rv)) return rv;
rv = m_registry->SetString(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated);
if (NS_FAILED(rv)) return rv;
rv = m_registry->SetString(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName);
rv = m_registry->SetString(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService);
rv = m_registry->SetString(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress);
rv = m_registry->SetString(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress);
rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo);
profileItem->updateProfileEntry = PR_FALSE;
}
@ -878,7 +871,7 @@ nsProfileAccess::Get4xProfileInfo(const char *registryName)
nsXPIDLCString profLoc;
rv = oldReg->GetString( key, "ProfileLocation", getter_Copies(profLoc));
rv = oldReg->GetStringUTF8( key, "ProfileLocation", getter_Copies(profLoc));
if (NS_FAILED(rv)) return rv;
#if defined(DEBUG_profile)
@ -911,7 +904,6 @@ nsProfileAccess::Get4xProfileInfo(const char *registryName)
rv = enumKeys->Next();
if (NS_FAILED(rv)) return rv;
}
oldReg->Close();
#elif defined (XP_BEOS)
#else

View File

@ -80,4 +80,4 @@ install:: $(LIBRARY)
$(MAKE_INSTALL) $(LIBRARY) $(DIST)\lib
clobber::
rm -f $(DIST)\lib\$(LIBRARY_NAME).lib
$(RM) $(DIST)\lib\$(LIBRARY_NAME).lib

View File

@ -215,7 +215,7 @@ nsCategoryManager::initialize()
}
nsXPIDLCString value;
mRegistry->GetString(categoryKey, entryName, getter_Copies(value));
mRegistry->GetStringUTF8(categoryKey, entryName, getter_Copies(value));
AddCategoryEntry(categoryName, entryName, value, PR_FALSE, PR_FALSE, 0);
}
}
@ -247,7 +247,7 @@ nsCategoryManager::persist( const char* aCategoryName, const char* aKey, const c
status = mRegistry->AddSubtreeRaw(mCategoriesRegistryKey, aCategoryName, &categoryRegistryKey);
if ( NS_SUCCEEDED(status) )
status = mRegistry->SetString(categoryRegistryKey, aKey, aValue);
status = mRegistry->SetStringUTF8(categoryRegistryKey, aKey, aValue);
return status;
}

View File

@ -45,6 +45,8 @@
#include "xcDll.h"
#include "prerror.h"
#include "prmem.h"
#include "nsIFile.h"
//#include "mozreg.h"
#include "NSReg.h"
#include "prcmon.h"
@ -468,7 +470,7 @@ nsComponentManagerImpl::PlatformVersionCheck()
if (NS_FAILED(rv)) return rv;
nsXPIDLCString buf;
nsresult err = mRegistry->GetString(xpcomKey, versionValueName,
nsresult err = mRegistry->GetStringUTF8(xpcomKey, versionValueName,
getter_Copies(buf));
// If there is a version mismatch or no version string, we got an old registry.
@ -537,7 +539,7 @@ nsComponentManagerImpl::PlatformVersionCheck()
}
rv = mRegistry->SetString(xpcomKey,versionValueName, NS_XPCOM_COMPONENT_MANAGER_VERSION_STRING);
rv = mRegistry->SetStringUTF8(xpcomKey,versionValueName, NS_XPCOM_COMPONENT_MANAGER_VERSION_STRING);
if(NS_FAILED(rv))
{
PR_LOG(nsComponentManagerLog, PR_LOG_ALWAYS,
@ -611,18 +613,18 @@ nsComponentManagerImpl::PlatformRegister(const char *cidString,
if (NS_FAILED(rv)) return (rv);
rv = mRegistry->SetString(IDkey,classNameValueName, className);
rv = mRegistry->SetStringUTF8(IDkey,classNameValueName, className);
if (progID)
{
rv = mRegistry->SetString(IDkey,progIDValueName, progID);
rv = mRegistry->SetStringUTF8(IDkey,progIDValueName, progID);
}
rv = mRegistry->SetString(IDkey, inprocServerValueName, dll->GetPersistentDescriptorString());
rv = mRegistry->SetStringUTF8(IDkey, inprocServerValueName, dll->GetPersistentDescriptorString());
if (progID)
{
nsRegistryKey progIDKey;
rv = mRegistry->AddSubtreeRaw(mClassesKey, progID, &progIDKey);
rv = mRegistry->SetString(progIDKey, classIDValueName, cidString);
rv = mRegistry->SetStringUTF8(progIDKey, classIDValueName, cidString);
}
// XXX Gross. LongLongs dont have a serialization format. This makes
@ -655,7 +657,7 @@ nsComponentManagerImpl::PlatformUnregister(const char *cidString,
rv = mRegistry->AddSubtreeRaw(mCLSIDKey, cidString, &cidKey);
char *progID = NULL;
rv = mRegistry->GetString(cidKey, progIDValueName, &progID);
rv = mRegistry->GetStringUTF8(cidKey, progIDValueName, &progID);
if(NS_SUCCEEDED(rv))
{
mRegistry->RemoveSubtreeRaw(mClassesKey, progID);
@ -703,7 +705,7 @@ nsComponentManagerImpl::PlatformFind(const nsCID &aCID, nsFactoryEntry* *result)
if (NS_FAILED(rv)) return rv;
nsXPIDLCString library;
rv = mRegistry->GetString(cidKey, inprocServerValueName,
rv = mRegistry->GetStringUTF8(cidKey, inprocServerValueName,
getter_Copies(library));
if (NS_FAILED(rv))
{
@ -712,7 +714,7 @@ nsComponentManagerImpl::PlatformFind(const nsCID &aCID, nsFactoryEntry* *result)
}
nsXPIDLCString componentType;
rv = mRegistry->GetString(cidKey, componentTypeValueName,
rv = mRegistry->GetStringUTF8(cidKey, componentTypeValueName,
getter_Copies(componentType));
if (NS_FAILED(rv))
@ -750,7 +752,7 @@ nsComponentManagerImpl::PlatformProgIDToCLSID(const char *aProgID, nsCID *aClass
if (NS_FAILED(rv)) return NS_ERROR_FACTORY_NOT_REGISTERED;
char *cidString;
rv = mRegistry->GetString(progIDKey, classIDValueName, &cidString);
rv = mRegistry->GetStringUTF8(progIDKey, classIDValueName, &cidString);
if(NS_FAILED(rv)) return rv;
if (!(aClass->Parse(cidString)))
{
@ -778,12 +780,12 @@ nsComponentManagerImpl::PlatformCLSIDToProgID(const nsCID *aClass,
PR_FREEIF(cidStr);
char* classnameString;
rv = mRegistry->GetString(cidKey, classNameValueName, &classnameString);
rv = mRegistry->GetStringUTF8(cidKey, classNameValueName, &classnameString);
if(NS_FAILED(rv)) return rv;
*aClassName = classnameString;
char* progidString;
rv = mRegistry->GetString(cidKey,progIDValueName,&progidString);
rv = mRegistry->GetStringUTF8(cidKey,progIDValueName,&progidString);
if (NS_FAILED(rv)) return rv;
*aProgID = progidString;
@ -826,7 +828,7 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry()
// Create the CID entry
nsXPIDLCString library;
rv = mRegistry->GetString(cidKey, inprocServerValueName,
rv = mRegistry->GetStringUTF8(cidKey, inprocServerValueName,
getter_Copies(library));
if (NS_FAILED(rv)) continue;
nsCID aClass;
@ -834,7 +836,7 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry()
if (!(aClass.Parse(cidString))) continue;
nsXPIDLCString componentType;
if (NS_FAILED(mRegistry->GetString(cidKey, componentTypeValueName,
if (NS_FAILED(mRegistry->GetStringUTF8(cidKey, componentTypeValueName,
getter_Copies(componentType))))
continue;
@ -879,7 +881,7 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry()
if (NS_FAILED(rv)) continue;
nsXPIDLCString cidString;
rv = mRegistry->GetString(progidKey, classIDValueName,
rv = mRegistry->GetStringUTF8(progidKey, classIDValueName,
getter_Copies(cidString));
if (NS_FAILED(rv)) continue;
@ -1700,7 +1702,7 @@ nsComponentManagerImpl::GetLoaderForType(const char *aType,
return rv;
char *progID;
rv = mRegistry->GetString(loaderKey, progIDValueName, &progID);
rv = mRegistry->GetStringUTF8(loaderKey, progIDValueName, &progID);
if (NS_FAILED(rv))
return rv;
@ -1733,7 +1735,7 @@ nsComponentManagerImpl::RegisterComponentLoader(const char *aType, const char *a
/* XXX honour aReplace */
rv = mRegistry->SetString(loaderKey, progIDValueName, aProgID);
rv = mRegistry->SetStringUTF8(loaderKey, progIDValueName, aProgID);
#ifdef DEBUG_shaver_off
fprintf(stderr, "nNCI: registered %s as component loader for %s\n",
@ -1762,21 +1764,21 @@ nsComponentManagerImpl::AddComponentToRegistry(const nsCID &aClass,
goto out;
if (aClassName) {
rv = mRegistry->SetString(IDKey, classNameValueName, aClassName);
rv = mRegistry->SetStringUTF8(IDKey, classNameValueName, aClassName);
if (NS_FAILED(rv))
goto out;
}
rv = mRegistry->SetString(IDKey, inprocServerValueName, aRegistryName);
rv = mRegistry->SetStringUTF8(IDKey, inprocServerValueName, aRegistryName);
if (NS_FAILED(rv))
goto out;
rv = mRegistry->SetString(IDKey, componentTypeValueName, aType);
rv = mRegistry->SetStringUTF8(IDKey, componentTypeValueName, aType);
if (NS_FAILED(rv))
goto out;
if (aProgID) {
rv = mRegistry->SetString(IDKey, progIDValueName, aProgID);
rv = mRegistry->SetStringUTF8(IDKey, progIDValueName, aProgID);
if (NS_FAILED(rv))
goto out;
@ -1784,7 +1786,7 @@ nsComponentManagerImpl::AddComponentToRegistry(const nsCID &aClass,
rv = mRegistry->AddSubtreeRaw(mClassesKey, aProgID, &progIDKey);
if (NS_FAILED(rv))
goto out;
rv = mRegistry->SetString(progIDKey, classIDValueName, cidString);
rv = mRegistry->SetStringUTF8(progIDKey, classIDValueName, cidString);
if (NS_FAILED(rv))
goto out;
}

View File

@ -36,15 +36,21 @@ interface nsIRegistry : nsISupports
const long ApplicationCustomRegistry = -1;
void open(in string regFile);
void openWellKnownRegistry(in long regid);
// Deprecated
void openDefault();
void close();
void openWellKnownRegistry(in nsWellKnownRegistry regid);
void flush();
boolean isOpen();
string getString(in nsRegistryKey baseKey, in string path);
void setString(in nsRegistryKey baseKey, in string path, in string value);
nsRegistryKey addKey(in nsRegistryKey baseKey, in wstring keyname);
nsRegistryKey getKey(in nsRegistryKey baseKey, in wstring keyname);
void removeKey(in nsRegistryKey baseKey, in wstring keyname);
wstring getString(in nsRegistryKey baseKey, in wstring valname);
void setString(in nsRegistryKey baseKey, in wstring valname, in wstring value);
string getStringUTF8(in nsRegistryKey baseKey, in string path);
void setStringUTF8(in nsRegistryKey baseKey, in string path, in string value);
PRInt32 getInt(in nsRegistryKey baseKey, in string path);
void setInt(in nsRegistryKey baseKey, in string path, in PRInt32 value);
PRInt64 getLongLong(in nsRegistryKey baseKey, in string path);

View File

@ -33,6 +33,8 @@
#include "nsCOMPtr.h"
#include "nsILocalFile.h"
#include "nsIServiceManager.h"
#include "nsTextFormatter.h"
/* extra locking for the paranoid */
/* #define EXTRA_THREADSAFE */
#ifndef EXTRA_THREADSAFE
@ -73,6 +75,8 @@ protected:
#endif
char *mCurRegFile; // these are to prevent open from opening the registry again
nsWellKnownRegistry mCurRegID;
NS_IMETHOD Close();
}; // nsRegistry
@ -482,6 +486,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) {
return regerr2nsresult( err );
}
#if 0
/*-------------------------- nsRegistry::OpenDefault ---------------------------
| Open the "default" registry; in the case of this libreg-based implementation |
| that is done by passing a null file name pointer to NR_RegOpen. |
@ -489,6 +494,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) {
NS_IMETHODIMP nsRegistry::OpenDefault() {
return OpenWellKnownRegistry(nsIRegistry::ApplicationRegistry);
}
#endif
/*----------------------------- nsRegistry::Close ------------------------------
| Tests the mReg handle and if non-null, closes the registry via NR_RegClose. |
@ -530,11 +536,122 @@ NS_IMETHODIMP nsRegistry::IsOpen( PRBool *result ) {
}
/*--------------------------- nsRegistry::AddKey -------------------------------
| Add a key into the registry or find an existing one. This is generally used |
| instead of GetKey unless it's an error for the key not to exist already i
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::AddKey( nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval)
{
if ( !keyname )
return NS_ERROR_NULL_POINTER;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = AddSubtree( baseKey, utf8name, _retval );
Recycle( utf8name );
return rv;
}
/*--------------------------- nsRegistry::GetKey -------------------------------
| returns the nsRegistryKey associated with a given node in the registry |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::GetKey(nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval)
{
if ( !keyname || !_retval )
return NS_ERROR_NULL_POINTER;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = GetSubtree( baseKey, utf8name, _retval );
Recycle( utf8name );
return rv;
}
/*--------------------------- nsRegistry::RemoveKey ----------------------------
| Delete a key from the registry |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::RemoveKey(nsRegistryKey baseKey, const PRUnichar *keyname)
{
if ( !keyname )
return NS_ERROR_NULL_POINTER;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = RemoveSubtree( baseKey, utf8name );
Recycle( utf8name );
return rv;
}
NS_IMETHODIMP nsRegistry::GetString(nsRegistryKey baseKey, const PRUnichar *valname, PRUnichar **_retval)
{
nsresult rv = NS_OK;
// Make sure caller gave us place for result.
if ( !valname || !_retval )
return NS_ERROR_NULL_POINTER;
// initialize the return value
*_retval = nsnull;
char *tmpstr = nsnull;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
if ( !utf8name )
return NS_ERROR_OUT_OF_MEMORY;
rv = GetStringUTF8( baseKey, utf8name, &tmpstr );
if (NS_SUCCEEDED(rv))
{
*_retval = nsTextFormatter::smprintf( L"%s", tmpstr );
nsCRT::free(tmpstr);
if ( *_retval == nsnull )
rv = NS_ERROR_OUT_OF_MEMORY;
}
Recycle( utf8name );
return rv;
}
NS_IMETHODIMP nsRegistry::SetString(nsRegistryKey baseKey, const PRUnichar *valname, const PRUnichar *value)
{
if ( !valname || ! value )
return NS_ERROR_NULL_POINTER;
nsresult rv = NS_OK;
nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) );
nsString val( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,value), PR_FALSE ) );
char* utf8name = name.ToNewUTF8String();
char* utf8val = val.ToNewUTF8String();
if ( utf8name && utf8val )
rv = SetStringUTF8( baseKey, utf8name, utf8val );
else
rv = NS_ERROR_OUT_OF_MEMORY;
if ( utf8name ) Recycle(utf8name);
if ( utf8val ) Recycle(utf8val);
return rv;
}
/*--------------------------- nsRegistry::GetString ----------------------------
| First, look for the entry using GetValueInfo. If found, and it's a string, |
| allocate space for it and fetch the value. |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, char **result ) {
NS_IMETHODIMP nsRegistry::GetStringUTF8( nsRegistryKey baseKey, const char *path, char **result ) {
nsresult rv = NS_OK;
REGERR err = REGERR_OK;
@ -601,7 +718,7 @@ NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, ch
/*--------------------------- nsRegistry::SetString ----------------------------
| Simply sets the registry contents using NR_RegSetEntryString. |
------------------------------------------------------------------------------*/
NS_IMETHODIMP nsRegistry::SetString( nsRegistryKey baseKey, const char *path, const char *value ) {
NS_IMETHODIMP nsRegistry::SetStringUTF8( nsRegistryKey baseKey, const char *path, const char *value ) {
REGERR err = REGERR_OK;
// Set the contents.
PR_Lock(mregLock);

View File

@ -45,11 +45,11 @@ PDBFILE=regExport
include <$(DEPTH)\config\rules.mak>
install:: $(PROGRAMS)
install:: $(OBJDIR) $(PROGRAMS)
-for %p in ($(PROGRAMS)) do $(MAKE_INSTALL) %p $(DIST)\bin
clobber::
-for %p in ($(PROGRAMS)) do $(RM) %p $(DIST)\bin\%p
$(PROG1): $(OBJDIR) regExport.cpp
#$(PROG1): $(OBJDIR) regExport.cpp

View File

@ -90,28 +90,37 @@ int main( int argc, char *argv[] ) {
rv = reg->Open( argv[1] );
if ( rv == NS_OK ) {
NS_ADDREF(reg);
// NS_ADDREF(reg);
printf( "Registry %s opened OK.\n", argv[1] ? argv[1] : "<default>" );
// Recurse over all 3 branches.
display( reg, nsIRegistry::Common, "nsRegistry::Common" );
display( reg, nsIRegistry::Users, "nsRegistry::Users" );
display( reg, nsIRegistry::Common, "nsRegistry::CurrentUser" );
}
NS_RELEASE(reg);
if (argc == 1) {
// Called with no arguments. Print both the default registry and
// the components registry. We already printed the default regsitry.
// So just do the component registry.
rv = compMgr->CreateInstanceByProgID(NS_REGISTRY_PROGID, NULL,
NS_GET_IID(nsIRegistry),
(void **) &reg);
// Check result.
if ( NS_FAILED(rv) )
{
printf( "Error opening creating registry instance, rv=0x%08X\n", (int)rv );
return rv;
}
rv = reg->OpenWellKnownRegistry(nsIRegistry::ApplicationComponentRegistry);
if ( rv == NS_OK ) {
NS_ADDREF(reg);
printf( "Registry %s opened OK.\n", argv[1] ? argv[1] : "<Application Component Registry>" );
// NS_ADDREF(reg);
printf( "\n\n\nRegistry %s opened OK.\n", "<Application Component Registry>\n" );
// Recurse over all 3 branches.
display( reg, nsIRegistry::Common, "nsRegistry::Common" );
display( reg, nsIRegistry::Users, "nsRegistry::Users" );
display( reg, nsIRegistry::Common, "nsRegistry::CurrentUser" );
}
}

View File

@ -320,9 +320,6 @@ nsAppShellService::EnumerateComponents( EnumeratorMemberFunction function ) {
// Clean up.
if ( registry ) {
// Registry was accessed, close it.
registry->Close();
// Release enumerator (if necessary).
NS_IF_RELEASE( components );

View File

@ -165,7 +165,7 @@ static int TranslateReturnValue(nsresult aResult)
#include "nsCommandLineServiceMac.h"
#endif
extern "C" void NS_SetupRegistry_1();
extern "C" void NS_SetupRegistry_1(PRBool aNeedAutoreg);
static void
PrintUsage(void)
@ -221,6 +221,7 @@ static nsresult OpenChromURL( const char * urlstr, PRInt32 height = NS_SIZETOCON
return rv;
}
static void DumpArbitraryHelp()
{
nsresult rv;
@ -476,6 +477,27 @@ static nsresult main1(int argc, char* argv[], nsISplashScreen *splashScreen )
// the JS engine. See bugzilla bug 9967 details.
fpsetmask(0);
#endif
//----------------------------------------------------------------
// XPInstall needs to clean up after any updates that couldn't
// be completed because components were in use. This must be done
// **BEFORE** any other libraries are loaded!
//
// Will also check to see if AutoReg is required due to version
// change or installation of new components. If for some reason
// XPInstall can't be loaded we assume Autoreg is required.
//
// (scoped in a block to force release of COMPtr)
//----------------------------------------------------------------
PRBool needAutoreg = PR_TRUE;
{
nsCOMPtr<nsISoftwareUpdate> su = do_GetService(kSoftUpdateCID,&rv);
if (NS_SUCCEEDED(rv))
{
su->StartupTasks( &needAutoreg );
}
}
// nsServiceManager::UnregisterService(kSoftUpdateCID);
#if XP_MAC
stTSMCloser tsmCloser;
@ -485,7 +507,9 @@ static nsresult main1(int argc, char* argv[], nsISplashScreen *splashScreen )
#endif
// XXX: This call will be replaced by a registry initialization...
NS_SetupRegistry_1();
NS_SetupRegistry_1( needAutoreg );
// Start up the core services:
// Initialize the cmd line service
NS_WITH_SERVICE(nsICmdLineService, cmdLineArgs, kCmdLineServiceCID, &rv);
@ -706,24 +730,10 @@ int main(int argc, char* argv[])
rv = NS_InitXPCOM(NULL, NULL);
NS_ASSERTION( NS_SUCCEEDED(rv), "NS_InitXPCOM failed" );
{
//----------------------------------------------------------------
// XPInstall needs to clean up after any updates that couldn't
// be completed because components were in use. This must be done
// **BEFORE** any other components are loaded!
//
// Will also check to see if AutoReg is required due to version
// change or installation of new components
//
// (scoped in a block to force release of COMPtr)
//----------------------------------------------------------------
nsCOMPtr<nsISoftwareUpdate> su = do_GetService(kSoftUpdateCID,&rv);
if (NS_SUCCEEDED(rv))
su->StartupTasks();
}
nsresult result = main1( argc, argv, splash );
{
// Scoping this in a block to force the pref service to be
// released.

View File

@ -73,7 +73,7 @@ class nsISoftwareUpdate : public nsISupports
NS_IMETHOD InstallJarCallBack() = 0;
NS_IMETHOD GetMasterNotifier(nsIXPINotifier **notifier) = 0;
NS_IMETHOD SetActiveNotifier(nsIXPINotifier *notifier) = 0;
NS_IMETHOD StartupTasks() = 0;
NS_IMETHOD StartupTasks( PRBool* outAutoreg ) = 0;
};

View File

@ -34,5 +34,5 @@
[uuid(089929F0-4ED9-11d3-ABDD-000064657374)]
interface nsPIXPIStubHook : nsISupports
{
void SetProgramDirectory(in nsIFileSpec dir);
void StubInitialize(in nsIFileSpec dir);
};

View File

@ -24,7 +24,6 @@
*/
#include "nscore.h"
#include "NSReg.h"
#include "nsFileSpec.h"
#include "nsFileStream.h"
#include "nsInstall.h" // for error codes
@ -347,16 +346,10 @@ PRInt32 ReplaceFileNowOrSchedule(nsFileSpec& replacementFile, nsFileSpec& doomed
void DeleteScheduledFiles(HREG);
void ReplaceScheduledFiles(HREG);
void PerformScheduledTasks(void *data)
void PerformScheduledTasks(HREG reg)
{
HREG reg;
if ( REGERR_OK == NR_RegOpen("", &reg) )
{
DeleteScheduledFiles( reg );
ReplaceScheduledFiles( reg );
NR_RegClose(reg);
}
DeleteScheduledFiles( reg );
ReplaceScheduledFiles( reg );
}

View File

@ -28,6 +28,7 @@
#include "NSReg.h"
//#include "mozreg.h"
#include "nsFileSpec.h"
PR_BEGIN_EXTERN_C
@ -36,7 +37,7 @@ PRInt32 DeleteFileNowOrSchedule(const nsFileSpec& filename);
PRInt32 ReplaceFileNowOrSchedule(nsFileSpec& tmpfile, nsFileSpec& target );
void PerformScheduledTasks(void *data);
void PerformScheduledTasks(HREG reg);
PR_END_EXTERN_C

View File

@ -42,7 +42,6 @@ LCFLAGS = \
LLIBS = \
$(DIST)\lib\mozreg.lib \
$(DIST)\lib\xpcom.lib \
$(DIST)\lib\js3250.lib \
$(DIST)\lib\jsdombase_s.lib \
@ -50,6 +49,7 @@ LLIBS = \
$(DIST)\lib\zlib.lib \
$(DIST)\lib\strres.lib \
$(LIBNSPR) \
$(DIST)\lib\mozreg.lib \
$(NULL)

View File

@ -2225,7 +2225,7 @@ nsInstall::CleanUp(void)
mPatchList = nsnull;
}
if (mPackageFolder != nsnull)
if (mPackageFolder != nsnull)
{
delete (mPackageFolder);
mPackageFolder = nsnull;

View File

@ -59,7 +59,7 @@ NS_IMETHODIMP
nsLoggingProgressNotifier::BeforeJavascriptEvaluation(const PRUnichar *URL)
{
nsSpecialSystemDirectory logFile(nsSpecialSystemDirectory::OS_CurrentProcessDirectory);
logFile += "Install.log";
logFile += "install.log";
mLogStream = new nsOutputFileStream(logFile, PR_WRONLY | PR_CREATE_FILE | PR_APPEND, 0744 );
if (!mLogStream)

View File

@ -104,7 +104,8 @@ nsSoftwareUpdate::GetInstance()
nsSoftwareUpdate::nsSoftwareUpdate()
: mInstalling(PR_FALSE),
mStubLockout(PR_FALSE)
mStubLockout(PR_FALSE),
mReg(0)
{
NS_INIT_ISUPPORTS();
@ -195,6 +196,11 @@ nsSoftwareUpdate::QueryInterface( REFNSIID anIID, void **anInstancePtr )
NS_IMETHODIMP
nsSoftwareUpdate::Initialize( nsIAppShellService *anAppShell, nsICmdLineService *aCmdLineService )
{
// Close the registry if open. We left it open through most of startup
// so it wouldn't get opened and closed a lot by different services
if (mReg)
NR_RegClose(mReg);
// prevent use of nsPIXPIStubHook by browser
mStubLockout = PR_TRUE;
@ -303,9 +309,17 @@ nsSoftwareUpdate::InstallJarCallBack()
NS_IMETHODIMP
nsSoftwareUpdate::StartupTasks()
nsSoftwareUpdate::StartupTasks( PRBool* outAutoreg )
{
PerformScheduledTasks(0);
if (outAutoreg) *outAutoreg = PR_FALSE;
if ( REGERR_OK == NR_RegOpen("", &mReg) )
{
// XXX get a return val and if not all replaced autoreg again later
PerformScheduledTasks(mReg);
}
return NS_OK;
}
@ -368,20 +382,24 @@ nsSoftwareUpdate::RegisterNameset()
NS_IMETHODIMP
nsSoftwareUpdate::SetProgramDirectory(nsIFileSpec *aDir)
nsSoftwareUpdate::StubInitialize(nsIFileSpec *aDir)
{
if (mStubLockout)
return NS_ERROR_ABORT;
else if ( !aDir )
return NS_ERROR_NULL_POINTER;
// only allow once, it would be a mess if we've already started installing
// only allow once, it could be a mess if we've already started installing
mStubLockout = PR_TRUE;
// fix GetFolder return path
mProgramDir = aDir;
NS_ADDREF(mProgramDir);
// Create the logfile observer
nsLoggingProgressNotifier *logger = new nsLoggingProgressNotifier();
RegisterNotifier(logger);
// setup version registry path
char* path;
nsresult rv = aDir->GetNativePath( &path );
@ -493,8 +511,8 @@ RegisterSoftwareUpdate( nsIComponentManager *aCompMgr,
&key );
nsServiceManager::ReleaseService(NS_REGISTRY_PROGID, registry);
}
return rv;
}
@ -507,7 +525,7 @@ static nsModuleComponentInfo components[] =
nsSoftwareUpdateConstructor,
RegisterSoftwareUpdate
},
{ "InstallTrigger Component",
NS_SoftwareUpdateInstallTrigger_CID,
NS_INSTALLTRIGGERCOMPONENT_PROGID,

View File

@ -11,6 +11,8 @@
#include "nsString.h"
#include "nsVoidArray.h"
#include "prlock.h"
//#include "mozreg.h"
#include "NSReg.h"
class nsInstallInfo;
@ -50,14 +52,14 @@ class nsSoftwareUpdate: public nsIAppShellComponent,
NS_IMETHOD InstallJarCallBack();
NS_IMETHOD GetMasterNotifier(nsIXPINotifier **notifier);
NS_IMETHOD SetActiveNotifier(nsIXPINotifier *notifier);
NS_IMETHOD StartupTasks();
NS_IMETHOD StartupTasks( PRBool* outAutoreg );
/** SetProgramDirectory() is private for the Install Wizard.
/** StubInitialize() is private for the Install Wizard.
* The mStubLockout property makes sure this is only called
* once, and is also set by the AppShellComponent initialize
* so it can't be called during a normal Mozilla run
*/
NS_IMETHOD SetProgramDirectory(nsIFileSpec *dir);
NS_IMETHOD StubInitialize(nsIFileSpec *dir);
nsSoftwareUpdate();
virtual ~nsSoftwareUpdate();
@ -75,6 +77,8 @@ class nsSoftwareUpdate: public nsIAppShellComponent,
PRBool mStubLockout;
nsVoidArray mJarInstallQueue;
nsTopProgressNotifier mMasterNotifier;
HREG mReg;
};

View File

@ -443,12 +443,6 @@ extern "C" void RunInstallOnThread(void *data)
if (scriptBuffer) delete [] scriptBuffer;
if ( !url.Equals("file:/",PR_FALSE,6) )
{
// delete the jarfile only if we've downloaded it
jarpath.Delete(PR_FALSE);
}
softwareUpdate->SetActiveNotifier(0);
softwareUpdate->InstallJarCallBack();
}

View File

@ -45,7 +45,7 @@ public:
nsString val,
PRInt32 *aReturn);
~nsWinProfileItem();
virtual ~nsWinProfileItem();
/**
* Completes the install:

View File

@ -54,7 +54,7 @@ public:
PRInt32 val,
PRInt32* aReturn);
~nsWinRegItem();
virtual ~nsWinRegItem();
PRInt32 Prepare(void);

View File

@ -59,6 +59,10 @@ static NS_DEFINE_IID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
static NS_DEFINE_CID(kDialogParamBlockCID, NS_DialogParamBlock_CID);
#include "nsIEventQueueService.h"
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
#define XPINSTALL_BUNDLE_URL "chrome://xpinstall/locale/xpinstall.properties"
nsXPInstallManager::nsXPInstallManager()
@ -261,6 +265,7 @@ nsXPInstallManager::InitManager(nsXPITriggerInfo* aTriggers)
return rv;
}
NS_IMETHODIMP nsXPInstallManager::DialogOpened(nsISupports* aWindow)
{
nsresult rv;
@ -422,6 +427,21 @@ void nsXPInstallManager::Shutdown()
mDlg = 0;
// Clean up downloaded files
nsXPITriggerItem* item;
nsFileSpec tmpSpec;
for (PRUint32 i = 0; i < mTriggers->Size(); i++ )
{
item = NS_STATIC_CAST(nsXPITriggerItem*, mTriggers->Get(i));
if ( item && item->mFile && !item->IsFileURL() )
{
item->mFile->GetFileSpec(&tmpSpec);
tmpSpec.Delete(PR_FALSE);
}
}
NS_RELEASE_THIS();
}
@ -534,6 +554,8 @@ nsXPInstallManager::OnStopRequest(nsIChannel* channel, nsISupports *ctxt,
DownloadNext();
return rv;
}
NS_IMETHODIMP
nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt,
nsIInputStream *pIStream,
@ -543,7 +565,7 @@ nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt,
PRUint32 amt;
PRInt32 result;
nsresult err;
char buffer[1025];
char buffer[8*1024];
if (mCancelled)
{
@ -554,7 +576,7 @@ nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt,
do
{
err = pIStream->Read(buffer, 1024, &amt);
err = pIStream->Read(buffer, sizeof(buffer), &amt);
if (amt == 0) break;
if (NS_FAILED(err))
{
@ -568,7 +590,8 @@ nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt,
//printf("mItem->mFile->Write Failed! err:%d amt:%d result:%d\n", err, amt, result);
return NS_ERROR_FAILURE;
}
} while (amt > 0);
length -= amt;
} while (length > 0);
return NS_OK;
}

View File

@ -157,7 +157,7 @@ PR_PUBLIC_API(nsresult) XPI_Init(
NS_NewFileSpecWithSpec( dirSpec, getter_AddRefs(iDirSpec) );
if (hook && iDirSpec)
hook->SetProgramDirectory( iDirSpec );
hook->StubInitialize( iDirSpec );
else
return NS_ERROR_NULL_POINTER;
@ -217,7 +217,7 @@ PR_PUBLIC_API(PRInt32) XPI_Install(
nsFileURL URL(file);
nsString URLstr(URL.GetURLString());
gInstallStatus = -322; // nsInstall::UNEXPECTED_ERROR
gInstallStatus = -322; // unique stub error code
NS_NewFileSpecWithSpec( file, getter_AddRefs(iFile) );