projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
attempt to fix a rare crash which happens when changing the number of columns in...
[wxWidgets.git]
/
src
/
common
/
sckaddr.cpp
diff --git
a/src/common/sckaddr.cpp
b/src/common/sckaddr.cpp
index 8131c0427abb3311cce9f3d534a01199df1c8e87..ff8739c79dc340adbff69ad42faf1d16e40959da 100644
(file)
--- a/
src/common/sckaddr.cpp
+++ b/
src/common/sckaddr.cpp
@@
-22,19
+22,23
@@
#if wxUSE_SOCKETS
#if wxUSE_SOCKETS
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
+#ifndef WX_PRECOMP
+ #include "wx/defs.h"
+ #include "wx/object.h"
+ #include "wx/log.h"
+ #include "wx/intl.h"
-#if !defined(__MWERKS__) && !defined(__SALFORDC__)
-#include <memory.h>
-#endif
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <ctype.h>
+
+ #if !defined(__MWERKS__) && !defined(__SALFORDC__)
+ #include <memory.h>
+ #endif
+#endif // !WX_PRECOMP
-#include "wx/defs.h"
-#include "wx/object.h"
-#include "wx/log.h"
-#include "wx/intl.h"
#include "wx/gsocket.h"
#include "wx/gsocket.h"
+#include "wx/socket.h"
#include "wx/sckaddr.h"
IMPLEMENT_ABSTRACT_CLASS(wxSockAddress, wxObject)
#include "wx/sckaddr.h"
IMPLEMENT_ABSTRACT_CLASS(wxSockAddress, wxObject)
@@
-42,7
+46,7
@@
IMPLEMENT_DYNAMIC_CLASS(wxIPV4address, wxSockAddress)
#ifdef ENABLE_IPV6
IMPLEMENT_DYNAMIC_CLASS(wxIPV6address, wxSockAddress)
#endif
#ifdef ENABLE_IPV6
IMPLEMENT_DYNAMIC_CLASS(wxIPV6address, wxSockAddress)
#endif
-#if
def __UNIX__
+#if
defined(__UNIX__) && (!defined(__WXMAC__) || defined(__DARWIN__))
IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress)
#endif
IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress)
#endif
@@
-50,9
+54,28
@@
IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress)
// wxIPV4address
// ---------------------------------------------------------------------------
// wxIPV4address
// ---------------------------------------------------------------------------
+void wxSockAddress::Init()
+{
+ if ( !wxSocketBase::IsInitialized() )
+ {
+ // we must do it before using GAddress_XXX functions
+ (void)wxSocketBase::Initialize();
+ }
+}
+
wxSockAddress::wxSockAddress()
{
wxSockAddress::wxSockAddress()
{
- m_address = GAddress_new();
+ Init();
+
+ m_address = GAddress_new();
+}
+
+wxSockAddress::wxSockAddress(const wxSockAddress& other)
+ : wxObject()
+{
+ Init();
+
+ m_address = GAddress_copy(other.m_address);
}
wxSockAddress::~wxSockAddress()
}
wxSockAddress::~wxSockAddress()
@@
-66,22
+89,14
@@
void wxSockAddress::SetAddress(GAddress *address)
m_address = GAddress_copy(address);
}
m_address = GAddress_copy(address);
}
-
const
wxSockAddress& wxSockAddress::operator=(const wxSockAddress& addr)
+wxSockAddress& wxSockAddress::operator=(const wxSockAddress& addr)
{
SetAddress(addr.GetAddress());
return *this;
}
{
SetAddress(addr.GetAddress());
return *this;
}
-void wxSockAddress::CopyObject(wxObject& dest) const
-{
- wxSockAddress *addr = (wxSockAddress *)&dest;
-
- wxObject::CopyObject(dest);
- addr->SetAddress(GetAddress());
-}
-
void wxSockAddress::Clear()
void wxSockAddress::Clear()
-{
+{
GAddress_destroy(m_address);
m_address = GAddress_new();
}
GAddress_destroy(m_address);
m_address = GAddress_new();
}
@@
-91,7
+106,11
@@
void wxSockAddress::Clear()
// ---------------------------------------------------------------------------
wxIPV4address::wxIPV4address()
// ---------------------------------------------------------------------------
wxIPV4address::wxIPV4address()
- : wxSockAddress()
+{
+}
+
+wxIPV4address::wxIPV4address(const wxIPV4address& other)
+ : wxSockAddress(other)
{
}
{
}
@@
-102,23
+121,28
@@
wxIPV4address::~wxIPV4address()
bool wxIPV4address::Hostname(const wxString& name)
{
// Some people are sometimes fool.
bool wxIPV4address::Hostname(const wxString& name)
{
// Some people are sometimes fool.
- if (name == wxT(""))
+ if (name == wxT(""))
{
wxLogWarning( _("Trying to solve a NULL hostname: giving up") );
return FALSE;
}
{
wxLogWarning( _("Trying to solve a NULL hostname: giving up") );
return FALSE;
}
-
- return (GAddress_INET_SetHostName(m_address, name.
fn
_str()) == GSOCK_NOERROR);
+ m_origHostname = name;
+ return (GAddress_INET_SetHostName(m_address, name.
mb
_str()) == GSOCK_NOERROR);
}
bool wxIPV4address::Hostname(unsigned long addr)
{
}
bool wxIPV4address::Hostname(unsigned long addr)
{
- return (GAddress_INET_SetHostAddress(m_address, addr) == GSOCK_NOERROR);
+ bool rv = (GAddress_INET_SetHostAddress(m_address, addr) == GSOCK_NOERROR);
+ if (rv)
+ m_origHostname = Hostname();
+ else
+ m_origHostname = "";
+ return rv;
}
bool wxIPV4address::Service(const wxString& name)
{
}
bool wxIPV4address::Service(const wxString& name)
{
- return (GAddress_INET_SetPortName(m_address, name.
fn
_str(), "tcp") == GSOCK_NOERROR);
+ return (GAddress_INET_SetPortName(m_address, name.
mb
_str(), "tcp") == GSOCK_NOERROR);
}
bool wxIPV4address::Service(unsigned short port)
}
bool wxIPV4address::Service(unsigned short port)
@@
-147,7
+171,14
@@
wxString wxIPV4address::Hostname()
unsigned short wxIPV4address::Service()
{
unsigned short wxIPV4address::Service()
{
- return GAddress_INET_GetPort(m_address);
+ return GAddress_INET_GetPort(m_address);
+}
+
+wxSockAddress *wxIPV4address::Clone() const
+{
+ wxIPV4address *addr = new wxIPV4address(*this);
+ addr->m_origHostname = m_origHostname;
+ return addr;
}
#if 0
}
#if 0
@@
-160,6
+191,11
@@
wxIPV6address::wxIPV6address()
{
}
{
}
+wxIPV6address::wxIPV6address(const wxIPV6address& other)
+ : wxSockAddress(other)
+{
+}
+
wxIPV6address::~wxIPV6address()
{
}
wxIPV6address::~wxIPV6address()
{
}
@@
-196,18
+232,24
@@
const wxString& wxIPV6address::Hostname()
unsigned short wxIPV6address::Service()
{
unsigned short wxIPV6address::Service()
{
- return GAddress_INET_GetPort(m_address);
+ return GAddress_INET_GetPort(m_address);
}
}
-#endif
+#endif // 0
+
+#if defined(__UNIX__) && (!defined(__WXMAC__) || defined(__DARWIN__))
-#ifdef __UNIX__
// ---------------------------------------------------------------------------
// wxUNIXaddress
// ---------------------------------------------------------------------------
wxUNIXaddress::wxUNIXaddress()
// ---------------------------------------------------------------------------
// wxUNIXaddress
// ---------------------------------------------------------------------------
wxUNIXaddress::wxUNIXaddress()
- : wxSockAddress()
+ : wxSockAddress()
+{
+}
+
+wxUNIXaddress::wxUNIXaddress(const wxUNIXaddress& other)
+ : wxSockAddress(other)
{
}
{
}
@@
-229,7
+271,7
@@
wxString wxUNIXaddress::Filename()
return wxString(path);
}
return wxString(path);
}
-#endif
+#endif
// __UNIX__
-#endif
+#endif
// wxUSE_SOCKETS
// wxUSE_SOCKETS