BOOL vmsDownloadsGroupsMgr::SaveGroupsTreeToFile(HANDLE hFile, PDLDS_GROUPS_TREE pRoot)
{
	int cGroups = pRoot->GetLeafCount ();
	DWORD dw;
	if (FALSE == WriteFile (hFile, &cGroups, sizeof (int), &dw, NULL))
		return FALSE;

	for (int i = 0; i < cGroups; i++)
	{
		PDLDS_GROUPS_TREE pGroupTree = pRoot->GetLeaf (i);
		if (FALSE == SaveGroupToFile (hFile, pGroupTree->GetData ()))
			return FALSE;
		if (FALSE == SaveGroupsTreeToFile (hFile, pGroupTree))
			return FALSE;
	}

	return TRUE;
}
Exemplo n.º 2
0
BOOL vmsDownloadsGroupsMgr::SaveToDisk()
{
    fsString strFile = fsGetDataFilePath ("groups.sav");

    bool bSaveGroupsInformation = false;
    {
        vmsCriticalSectionAutoLock csalGroupsInformationChangeGuardAutoLock(&m_csGroupsInformationChangeGuard);
        bSaveGroupsInformation = m_bIsGroupsInformationChanged;
        m_bIsGroupsInformationChanged = false;
    }

    if (!bSaveGroupsInformation) {
        return TRUE;
    }

    HANDLE hFile = CreateFile (strFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
                               FILE_ATTRIBUTE_HIDDEN, NULL);

    if (hFile == INVALID_HANDLE_VALUE)
        return FALSE;

    vmsDownloadsGroupsFileHdr hdr;
    DWORD dw;
    if (FALSE == WriteFile (hFile, &hdr, sizeof (hdr), &dw, NULL))
    {
        CloseHandle (hFile);
        return FALSE;
    }

    if (FALSE == WriteFile (hFile, &m_nGrpNextId, sizeof (UINT), &dw, NULL))
    {
        CloseHandle (hFile);
        return FALSE;
    }

    BOOL bOk = SaveGroupsTreeToFile (hFile, m_tGroups);
    CloseHandle (hFile);
    return bOk;
}