Clode cleanup. Abstracted registry access code that does ProgID into functions platformProgIDToCLSID() and platformCLSIDToProgID()

git-svn-id: svn://10.0.0.236/trunk@22355 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dp%netscape.com
1999-02-27 08:58:11 +00:00
parent 357801b38b
commit a6760a0dec
2 changed files with 264 additions and 212 deletions

View File

@@ -625,6 +625,127 @@ static FactoryEntry *platformFind(const nsCID &aCID)
return (res);
}
static nsresult platformProgIDToCLSID(const char *aProgID, nsCID *aClass)
{
HREG hreg;
nsresult res = NS_ERROR_FAILURE;
PR_ASSERT(aClass != NULL);
REGERR err = NR_RegOpen(NULL, &hreg);
if (err != REGERR_OK)
{
return (NS_ERROR_FAILURE);
}
RKEY classesKey;
if (NR_RegAddKey(hreg, ROOTKEY_COMMON, "Classes", &classesKey) != REGERR_OK)
{
NR_RegClose(hreg);
return (NS_ERROR_FAILURE);
}
RKEY key;
err = NR_RegGetKey(hreg, classesKey, (char *)aProgID, &key);
if (err != REGERR_OK)
{
NR_RegClose(hreg);
return (NS_ERROR_FAILURE);
}
char cidString[MAXREGNAMELEN];
err = NR_RegGetEntryString(hreg, key, "CLSID", cidString, MAXREGNAMELEN);
if (err != REGERR_OK)
{
NR_RegClose(hreg);
return (NS_ERROR_FAILURE);
}
NR_RegClose(hreg);
if (!(aClass->Parse(cidString)))
{
return (NS_ERROR_FAILURE);
}
res = NS_OK;
return (res);
}
static nsresult platformCLSIDToProgID(nsCID *aClass,
char* *aClassName, char* *aProgID)
{
HREG hreg;
char* classnameString;
char* progidString;
nsresult res = NS_ERROR_FAILURE;
char* cidStr = aClass->ToString();
PR_ASSERT(aClass != NULL);
REGERR err = NR_RegOpen(NULL, &hreg);
if (err != REGERR_OK)
{
res = NS_ERROR_FAILURE;
goto done1;
}
RKEY classesKey;
if (NR_RegAddKey(hreg, ROOTKEY_COMMON, "Classes", &classesKey) != REGERR_OK)
{
res = NS_ERROR_FAILURE;
goto done2;
}
RKEY key;
err = NR_RegGetKey(hreg, classesKey, cidStr, &key);
if (err != REGERR_OK)
{
res = NS_ERROR_FAILURE;
goto done2;
}
classnameString = new char[MAXREGNAMELEN];
if (classnameString == NULL) {
res = NS_ERROR_OUT_OF_MEMORY;
goto done2;
}
err = NR_RegGetEntryString(hreg, key, "ClassName", classnameString, MAXREGNAMELEN);
if (err != REGERR_OK)
{
delete[] classnameString;
res = NS_ERROR_FAILURE;
goto done2;
}
*aClassName = classnameString;
progidString = new char[MAXREGNAMELEN];
if (progidString == NULL) {
delete[] classnameString;
res = NS_ERROR_OUT_OF_MEMORY;
goto done2;
}
err = NR_RegGetEntryString(hreg, key, "ProgID", progidString, MAXREGNAMELEN);
if (err != REGERR_OK)
{
delete[] progidString;
delete[] classnameString;
res = NS_ERROR_FAILURE;
goto done2;
}
*aProgID = progidString;
res = NS_OK;
done2:
NR_RegClose(hreg);
done1:
delete[] cidStr;
return (res);
}
#endif // USE_NSREG
/***************************************************************************/
@@ -749,53 +870,16 @@ nsresult nsRepository::ProgIDToCLSID(const char *aProgID,
nsCID *aClass)
{
nsresult res = NS_ERROR_FACTORY_NOT_REGISTERED;
#ifdef USE_REGISTRY
HREG hreg;
checkInitialized();
if (PR_LOG_TEST(logmodule, PR_LOG_ALWAYS))
{
PR_LogPrint("nsRepository: ProgIDToCLSID(%s)", aProgID);
}
PR_ASSERT(aClass != NULL);
REGERR err = NR_RegOpen(NULL, &hreg);
if (err != REGERR_OK)
{
return (NS_ERROR_FAILURE);
}
RKEY classesKey;
if (NR_RegAddKey(hreg, ROOTKEY_COMMON, "Classes", &classesKey) != REGERR_OK)
{
NR_RegClose(hreg);
return (NS_ERROR_FAILURE);
}
RKEY key;
err = NR_RegGetKey(hreg, classesKey, (char *)aProgID, &key);
if (err != REGERR_OK)
{
NR_RegClose(hreg);
return (NS_ERROR_FAILURE);
}
char cidString[MAXREGNAMELEN];
err = NR_RegGetEntryString(hreg, key, "CLSID", cidString, MAXREGNAMELEN);
if (err != REGERR_OK)
{
NR_RegClose(hreg);
return (NS_ERROR_FAILURE);
}
NR_RegClose(hreg);
if (!(aClass->Parse(cidString)))
{
return (NS_ERROR_FAILURE);
}
res = NS_OK;
#ifdef USE_REGISTRY
res = platformProgIDToCLSID(aProgID, aClass);
#endif /* USE_REGISTRY */
PR_LOG(logmodule, PR_LOG_WARNING, ("nsRepository: ProgIDToCLSID() %s",
@@ -804,84 +888,26 @@ nsresult nsRepository::ProgIDToCLSID(const char *aProgID,
return res;
}
nsresult nsRepository::CLSIDToProgID(nsCID *aClass,
char* *aClassName,
char* *aProgID)
{
nsresult res = NS_ERROR_FACTORY_NOT_REGISTERED;
#ifdef USE_REGISTRY
HREG hreg;
char* classnameString;
char* progidString;
checkInitialized();
char* cidStr = aClass->ToString();
if (PR_LOG_TEST(logmodule, PR_LOG_ALWAYS))
{
PR_LogPrint("nsRepository: CLSIDToProgID(%s)", cidStr);
}
PR_ASSERT(aClass != NULL);
REGERR err = NR_RegOpen(NULL, &hreg);
if (err != REGERR_OK)
{
res = NS_ERROR_FAILURE;
goto done1;
char *buf = aClass->ToString();
PR_LogPrint("nsRepository: CLSIDToProgID(%s)", buf);
delete [] buf;
}
RKEY classesKey;
if (NR_RegAddKey(hreg, ROOTKEY_COMMON, "Classes", &classesKey) != REGERR_OK)
{
res = NS_ERROR_FAILURE;
goto done2;
}
RKEY key;
err = NR_RegGetKey(hreg, classesKey, cidStr, &key);
if (err != REGERR_OK)
{
res = NS_ERROR_FAILURE;
goto done2;
}
classnameString = new char[MAXREGNAMELEN];
if (classnameString == NULL) {
res = NS_ERROR_OUT_OF_MEMORY;
goto done2;
}
err = NR_RegGetEntryString(hreg, key, "ClassName", classnameString, MAXREGNAMELEN);
if (err != REGERR_OK)
{
delete[] classnameString;
res = NS_ERROR_FAILURE;
goto done2;
}
*aClassName = classnameString;
progidString = new char[MAXREGNAMELEN];
if (progidString == NULL) {
delete[] classnameString;
res = NS_ERROR_OUT_OF_MEMORY;
goto done2;
}
err = NR_RegGetEntryString(hreg, key, "ProgID", progidString, MAXREGNAMELEN);
if (err != REGERR_OK)
{
delete[] progidString;
delete[] classnameString;
res = NS_ERROR_FAILURE;
goto done2;
}
*aProgID = progidString;
res = NS_OK;
done2:
NR_RegClose(hreg);
done1:
delete[] cidStr;
#ifdef USE_REGISTRY
res = platformCLSIDToProgID(aClass, aClassName, aProgID);
#endif /* USE_REGISTRY */
PR_LOG(logmodule, PR_LOG_WARNING, ("nsRepository: CLSIDToProgID() %s",
res == NS_OK ? "succeeded" : "FAILED"));
return res;