From: Jon K. <em...@us...> - 2004-06-10 13:56:09
|
Update of /cvsroot/licq/licq/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3815/src Modified Files: icqd.cpp user.cpp Log Message: Add removing owners. Fix creating new owners. Index: icqd.cpp =================================================================== RCS file: /cvsroot/licq/licq/src/icqd.cpp,v retrieving revision 1.87 retrieving revision 1.88 diff -u -d -r1.87 -r1.88 --- icqd.cpp 27 May 2004 07:00:26 -0000 1.87 +++ icqd.cpp 10 Jun 2004 13:55:57 -0000 1.88 @@ -756,23 +756,35 @@ licqConf.FlushFile(); - ICQOwner *o = gUserManager.FetchOwner(LOCK_R); - if (o != NULL) + licqConf.SetSection("owners"); + OwnerList *ol = gUserManager.LockOwnerList(LOCK_R); + licqConf.WriteNum("NumOfOwners", (unsigned long)ol->size()); + gUserManager.UnlockOwnerList(); + + int n = 1; + FOR_EACH_OWNER_START(LOCK_R) { - o->SaveLicqInfo(); - // TODO: Make this work with multiple owners - if (strcmp(o->IdString(), "0") != 0) + char szOwnerId[11], szOwnerPPID[11]; + char szPPID[5]; + sprintf(szOwnerId, "Owner%d.Id", n); + sprintf(szOwnerPPID, "Owner%d.PPID", n++); + + szPPID[0] = (pOwner->PPID() & 0xFF000000) >> 24; + szPPID[1] = (pOwner->PPID() & 0x00FF0000) >> 16; + szPPID[2] = (pOwner->PPID() & 0x0000FF00) >> 8; + szPPID[3] = (pOwner->PPID() & 0x000000FF); + szPPID[4] = '\0'; + + pOwner->SaveLicqInfo(); + if (strcmp(pOwner->IdString(), "0") != 0) { - licqConf.SetSection("owners"); - OwnerList *ol = gUserManager.LockOwnerList(LOCK_R); - licqConf.WriteNum("NumOfOwners", (unsigned long)ol->size()); - gUserManager.UnlockOwnerList(); - licqConf.WriteStr("Owner1.Id", o->IdString()); - licqConf.FlushFile(); + licqConf.WriteStr(szOwnerId, pOwner->IdString()); + licqConf.WriteStr(szOwnerPPID, szPPID); } - - gUserManager.DropOwner(); } + FOR_EACH_OWNER_END + + licqConf.FlushFile(); } //++++++NOT MT SAFE+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Index: user.cpp =================================================================== RCS file: /cvsroot/licq/licq/src/user.cpp,v retrieving revision 1.87 retrieving revision 1.88 diff -u -d -r1.87 -r1.88 --- user.cpp 27 May 2004 07:00:26 -0000 1.87 +++ user.cpp 10 Jun 2004 13:55:57 -0000 1.88 @@ -680,6 +680,26 @@ delete u; } +// Need to call CICQDaemon::SaveConf() after this +void CUserManager::RemoveOwner(unsigned long _nPPID) +{ + ICQOwner *o = FetchOwner(_nPPID, LOCK_W); + if (o == NULL) return; + o->RemoveFiles(); + LockOwnerList(LOCK_W); + OwnerList::iterator iter = m_vpcOwners.begin(); + while (iter != m_vpcOwners.end() && o != (*iter)) iter++; + if (iter == m_vpcOwners.end()) + gLog.Warn("%sInternal Error: CUserManager::RemoveOwner():\n" + "%sOwner not found in vector.\n", + L_WARNxSTR, L_BLANKxSTR); + else + m_vpcOwners.erase(iter); + UnlockOwnerList(); + DropOwner(_nPPID); + delete o; +} + ICQUser *CUserManager::FetchUser(const char *_szId, unsigned long _nPPID, unsigned short _nLockType) { @@ -3600,6 +3620,7 @@ // Get the id before init m_fConf.SetFileName(filename); + m_fConf.SetFlags(INI_FxWARN | INI_FxALLOWxCREATE); m_fConf.ReloadFile(); m_fConf.SetFlags(0); m_fConf.SetSection("user"); |