Bug #235461 --> Fix a memory leak of mailing list RDF nodes. General code cleanup on a poorly written method.

sr=bienvenu
This commit is contained in:
scott%scott-macgregor.org 2004-02-25 05:43:09 +00:00
Родитель 107b5030b6
Коммит c1eaa4c117
1 изменённых файлов: 28 добавлений и 39 удалений

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

@ -551,21 +551,21 @@ nsresult nsAbDirectoryDataSource::createDirectoryNode(nsIAbDirectory* directory,
nsresult rv = NS_RDF_NO_VALUE;
if ((kNC_DirName == property))
rv = createDirectoryNameNode(directory, target);
if ((kNC_DirUri == property))
rv = createDirectoryUriNode(directory, target);
if ((kNC_Child == property))
rv = createDirectoryChildNode(directory, target);
if ((kNC_IsMailList == property))
rv = createDirectoryIsMailListNode(directory, target);
if ((kNC_IsRemote == property))
rv = createDirectoryIsRemoteNode(directory, target);
if ((kNC_IsSecure == property))
rv = createDirectoryIsSecureNode(directory, target);
if ((kNC_IsWriteable == property))
rv = createDirectoryIsWriteableNode(directory, target);
if ((kNC_DirTreeNameSort == property))
rv = createDirectoryTreeNameSortNode(directory, target);
rv = createDirectoryNameNode(directory, target);
else if ((kNC_DirUri == property))
rv = createDirectoryUriNode(directory, target);
else if ((kNC_Child == property))
rv = createDirectoryChildNode(directory, target);
else if ((kNC_IsMailList == property))
rv = createDirectoryIsMailListNode(directory, target);
else if ((kNC_IsRemote == property))
rv = createDirectoryIsRemoteNode(directory, target);
else if ((kNC_IsSecure == property))
rv = createDirectoryIsSecureNode(directory, target);
else if ((kNC_IsWriteable == property))
rv = createDirectoryIsWriteableNode(directory, target);
else if ((kNC_DirTreeNameSort == property))
rv = createDirectoryTreeNameSortNode(directory, target);
return rv;
}
@ -603,37 +603,26 @@ nsAbDirectoryDataSource::createDirectoryChildNode(nsIAbDirectory *directory,
{
nsCOMPtr<nsISupportsArray> pAddressLists;
directory->GetAddressLists(getter_AddRefs(pAddressLists));
if (pAddressLists)
{
PRUint32 total = 0;
pAddressLists->Count(&total);
if (total == 0)
return NS_RDF_NO_VALUE;
else
if (total)
{
PRBool isMailList = PR_FALSE;
directory->GetIsMailList(&isMailList);
if (isMailList)
{
return NS_RDF_NO_VALUE;
}
PRUint32 i;
NS_ASSERTION(total <= 1, "This code probably leaks. Please break out of the loop or something, ok?");
for (i = 0; i < total; i++)
{
nsCOMPtr<nsIRDFResource> mailList = do_QueryElementAt(pAddressLists, i);
if (mailList)
NS_ADDREF(*target = mailList);
else
return NS_RDF_NO_VALUE;
}
return NS_OK;
}
}
else
return NS_RDF_NO_VALUE;
if (!isMailList)
{
// fetch the last element
nsCOMPtr<nsIRDFResource> mailList = do_QueryElementAt(pAddressLists, total - 1);
NS_IF_ADDREF(*target = mailList);
}
} // if total
} // if pAddressLists
return (*target ? NS_OK : NS_RDF_NO_VALUE);
}
nsresult