Bug 435088 - "Check .autoreg in the GRE directory, too" [r=bsmedberg]

This commit is contained in:
Mike Hommey 2008-10-20 22:23:45 -05:00
Родитель 1795f7f20a
Коммит 8d2746885b
1 изменённых файлов: 40 добавлений и 12 удалений

Просмотреть файл

@ -289,6 +289,23 @@ RegisterGenericFactory(nsIComponentRegistrar* registrar,
static PRBool CheckUpdateFile()
{
nsresult rv;
nsCOMPtr<nsIFile> compregFile;
rv = nsDirectoryService::gService->Get(NS_XPCOM_COMPONENT_REGISTRY_FILE,
NS_GET_IID(nsIFile),
getter_AddRefs(compregFile));
if (NS_FAILED(rv)) {
NS_WARNING("Getting NS_XPCOM_COMPONENT_REGISTRY_FILE failed");
return PR_FALSE;
}
PRBool exists;
if (NS_FAILED(compregFile->Exists(&exists)) || !exists)
return PR_TRUE;
PRInt64 compregModTime;
compregFile->GetLastModifiedTime(&compregModTime);
nsCOMPtr<nsIFile> file;
rv = nsDirectoryService::gService->Get(NS_XPCOM_CURRENT_PROCESS_DIR,
NS_GET_IID(nsIFile),
@ -301,28 +318,39 @@ static PRBool CheckUpdateFile()
file->AppendNative(nsDependentCString(".autoreg"));
PRBool exists;
file->Exists(&exists);
if (!exists)
return PR_FALSE;
goto next;
nsCOMPtr<nsIFile> compregFile;
rv = nsDirectoryService::gService->Get(NS_XPCOM_COMPONENT_REGISTRY_FILE,
PRInt64 autoregModTime;
file->GetLastModifiedTime(&autoregModTime);
if (LL_CMP(autoregModTime, >, compregModTime))
return PR_TRUE;
next:
nsCOMPtr<nsIFile> greFile;
rv = nsDirectoryService::gService->Get(NS_GRE_DIR,
NS_GET_IID(nsIFile),
getter_AddRefs(compregFile));
getter_AddRefs(greFile));
if (NS_FAILED(rv)) {
NS_WARNING("Getting NS_XPCOM_COMPONENT_REGISTRY_FILE failed");
NS_WARNING("Getting NS_GRE_DIR failed");
return PR_FALSE;
}
if (NS_FAILED(compregFile->Exists(&exists)) || !exists)
return PR_TRUE;
greFile->AppendNative(nsDependentCString(".autoreg"));
PRInt64 compregModTime, autoregModTime;
compregFile->GetLastModifiedTime(&compregModTime);
file->GetLastModifiedTime(&autoregModTime);
PRBool equals;
rv = greFile->Equals(file, &equals);
if (NS_SUCCEEDED(rv) && equals)
return PR_FALSE;
greFile->Exists(&exists);
if (!exists)
return PR_FALSE;
greFile->GetLastModifiedTime(&autoregModTime);
return LL_CMP(autoregModTime, >, compregModTime);
}