void CApplicationMessenger::MediaPlay(const CFileItemList &list, int song)
{
ThreadMessage tMsg = {TMSG_MEDIA_PLAY};
- tMsg.lpVoid = (void *)new CFileItemList(list);
+ CFileItemList* listcopy = new CFileItemList();
+ listcopy->Copy(list);
+ tMsg.lpVoid = (void*)listcopy;
tMsg.dwParam1 = song;
tMsg.dwParam2 = 1;
SendMessage(tMsg, true);
void CApplicationMessenger::PlayListPlayerAdd(int playlist, const CFileItemList &list)
{
ThreadMessage tMsg = {TMSG_PLAYLISTPLAYER_ADD};
- tMsg.lpVoid = (void *)new CFileItemList(list);
+ CFileItemList* listcopy = new CFileItemList();
+ listcopy->Copy(list);
+ tMsg.lpVoid = (void*)listcopy;
tMsg.dwParam1 = playlist;
SendMessage(tMsg, true);
}
list.Clear();
return false;
}
- list = m_list;
+ list.Copy(m_list);
return true;
}
}
CPluginDirectory *dir = globalHandles[handle];
- CFileItemList pItemList = *items;
+ CFileItemList pItemList;
+ pItemList.Copy(*items);
dir->m_listItems->Append(pItemList);
dir->m_totalItems = totalItems;
/* check cache */
if(m_path == strPath)
{
- items = m_items;
+ items.Copy(m_items);
return true;
}
items.AddSortMethod(SORT_METHOD_SIZE , 553, LABEL_MASKS("%L", "%I", "%L", "%I")); // FileName, Size | Foldername, Size
items.AddSortMethod(SORT_METHOD_DATE , 552, LABEL_MASKS("%L", "%J", "%L", "%J")); // FileName, Date | Foldername, Date
- m_items = items;
+ m_items.Copy(items);
m_path = strPath;
return true;
}
ClearFileItems();
- *m_vecItems = items;
+ m_vecItems->Copy(items);
m_Directory->m_strPath = strDirectory;
m_strParentPath = strParentPath;
}
}
ClearFileItems();
- *m_vecItems = items;
+ m_vecItems->Copy(items);
// if we're getting the root source listing
// make sure the path history is clean
m_addrlen = sizeof(struct sockaddr);
}
+CTCPServer::CTCPClient::CTCPClient(const CTCPClient& client)
+{
+ Copy(client);
+}
+
+CTCPServer::CTCPClient& CTCPServer::CTCPClient::operator=(const CTCPClient& client)
+{
+ Copy(client);
+ return *this;
+}
+
int CTCPServer::CTCPClient::GetPermissionFlags()
{
return OPERATION_PERMISSION_ALL;
m_socket = -1;
}
}
+
+void CTCPServer::CTCPClient::Copy(const CTCPClient& client)
+{
+ m_socket = client.m_socket;
+ m_cliaddr = client.m_cliaddr;
+ m_addrlen = client.m_addrlen;
+ m_announcementflags = client.m_announcementflags;
+ m_beginBrackets = client.m_beginBrackets;
+ m_endBrackets = client.m_endBrackets;
+ m_buffer = client.m_buffer;
+}
+
{
public:
CTCPClient();
+ //Copying a CCriticalSection is not allowed, so copy everything but that
+ //when adding a member variable, make sure to copy it in CTCPClient::Copy
+ CTCPClient(const CTCPClient& client);
+ CTCPClient& operator=(const CTCPClient& client);
virtual int GetPermissionFlags();
virtual int GetAnnouncementFlags();
virtual bool SetAnnouncementFlags(int flags);
CCriticalSection m_critSection;
private:
+ void Copy(const CTCPClient& client);
int m_announcementflags;
int m_beginBrackets, m_endBrackets;
std::string m_buffer;
m_criticalSection.Destroy();
}
-//////////////////////////////////////////////////////////////////////
-CCriticalSection::CCriticalSection(const CCriticalSection& section)
-{
- *this = section;
-}
-
-CCriticalSection& CCriticalSection::operator=(const CCriticalSection& section)
-{
- if (this == §ion) return * this;
- return *this;
-}
-
// The C API.
void InitializeCriticalSection(CCriticalSection* section) { section->getCriticalSection().Initialize(); }
void DeleteCriticalSection(CCriticalSection* section) { section->getCriticalSection().Destroy(); }
CCriticalSection();
virtual ~CCriticalSection();
- CCriticalSection(const CCriticalSection& section);
- CCriticalSection& operator=(const CCriticalSection& section);
-
XCriticalSection& getCriticalSection() { return m_criticalSection; }
private:
XCriticalSection m_criticalSection;
+
+ //don't allow copying a CCriticalSection
+ CCriticalSection(const CCriticalSection& section) {}
+ CCriticalSection& operator=(const CCriticalSection& section) {return *this;}
};
// The CCritical section overloads.