X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9d04caf8b54d6ecec207c5ef45ecfda8422c0bec..77c8efc8c37da6d6a5e2e8022d21d1cd7d76371d:/src/common/sckaddr.cpp diff --git a/src/common/sckaddr.cpp b/src/common/sckaddr.cpp index 76e6163d22..ec572a2adb 100644 --- a/src/common/sckaddr.cpp +++ b/src/common/sckaddr.cpp @@ -31,14 +31,13 @@ #include "wx/object.h" #include "wx/log.h" #include "wx/intl.h" + #include "wx/thread.h" #include #include #include - #if !defined(__MWERKS__) - #include - #endif + #include #endif // !WX_PRECOMP #include "wx/socket.h" @@ -48,7 +47,7 @@ #include -#ifdef __UNIX__ +#if defined(__UNIX__) && !defined(__WXMSW__) #include #include #endif // __UNIX__ @@ -78,11 +77,15 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) // TODO: use POSIX getaddrinfo() (also available in Winsock 2) for simplicity // and to use the same code for IPv4 and IPv6 support -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #define HAVE_INET_ADDR + #ifndef HAVE_GETHOSTBYNAME #define HAVE_GETHOSTBYNAME + #endif + #ifndef HAVE_GETSERVBYNAME #define HAVE_GETSERVBYNAME + #endif // under MSW getxxxbyname() functions are MT-safe (but not reentrant) so // we don't need to serialize calls to them @@ -104,7 +107,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) #pragma warning(default:4706) #endif #endif -#endif // __WXMSW__ +#endif // __WINDOWS__ // we assume that we have gethostbyaddr_r() if and only if we have // gethostbyname_r() and that it uses the similar conventions to it (see @@ -139,7 +142,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) #ifdef HAVE_FUNC_GETSERVBYNAME_R_4 struct wxGetservBuf : servent_data { - wxGethostBuf() + wxGetservBuf() { memset(this, 0, sizeof(servent_data)); } @@ -148,7 +151,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) typedef char wxGetservBuf[1024]; #endif -#ifdef wxHAS_MT_SAFE_GETBY_FUNCS || !wxUSE_THREADS +#if defined(wxHAS_MT_SAFE_GETBY_FUNCS) || !wxUSE_THREADS #define wxLOCK_GETBY_MUTEX(name) #else // may need mutexes to protect getxxxbyxxx() calls #if defined(HAVE_GETHOSTBYNAME) || \ @@ -268,8 +271,9 @@ hostent *wxGethostbyname_r(const char *hostname, #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_5) he = gethostbyname_r(hostname, h, buffer, size, err); #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_3) - he = gethostbyname_r(hostname, h, &buffer); - *err = h_errno; + wxUnusedVar(var); + *err = gethostbyname_r(hostname, h, &buffer); + he = h; #elif defined(HAVE_GETHOSTBYNAME) wxLOCK_GETBY_MUTEX(name); @@ -299,8 +303,9 @@ hostent *wxGethostbyaddr_r(const char *addr_buf, #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_5) he = gethostbyaddr_r(addr_buf, buf_size, proto, h, buffer, size, err); #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_3) - he = gethostbyaddr_r(addr_buf, buf_size, proto, h, buffer); - *err = h_errno; + wxUnusedVar(size); + *err = gethostbyaddr_r(addr_buf, buf_size, proto, h, &buffer); + he = h; #elif defined(HAVE_GETHOSTBYADDR) wxLOCK_GETBY_MUTEX(addr); @@ -392,6 +397,7 @@ servent *wxGetservbyname_r(const char *port, #elif defined(HAVE_FUNC_GETSERVBYNAME_R_5) se = getservbyname_r(port, protocol, serv, buffer, size); #elif defined(HAVE_FUNC_GETSERVBYNAME_R_4) + wxUnusedVar(size); if ( getservbyname_r(port, protocol, serv, &buffer) != 0 ) return NULL; #elif defined(HAVE_GETSERVBYNAME) @@ -508,7 +514,7 @@ bool wxSockAddressImpl::SetHostName4(const wxString& name) if ( !addr ) return false; - const wxUTF8Buf namebuf(name.utf8_str()); + const wxScopedCharBuffer namebuf(name.utf8_str()); // first check if this is an address in quad dotted notation #if defined(HAVE_INET_ATON) @@ -695,7 +701,7 @@ bool wxSockAddressImpl::SetPath(const wxString& path) if ( !addr ) return false; - const wxUTF8Buf buf(path.utf8_str()); + const wxScopedCharBuffer buf(path.utf8_str()); if ( strlen(buf) >= UNIX_PATH_MAX ) return false; @@ -722,9 +728,19 @@ wxString wxSockAddressImpl::GetPath() const // wxSockAddress // ---------------------------------------------------------------------------- +const sockaddr *wxSockAddress::GetAddressData() const +{ + return GetAddress().GetAddr(); +} + +int wxSockAddress::GetAddressDataLen() const +{ + return GetAddress().GetLen(); +} + void wxSockAddress::Init() { - if ( !wxSocketBase::IsInitialized() ) + if ( wxIsMainThread() && !wxSocketBase::IsInitialized() ) { // we must do it before using any socket functions (void)wxSocketBase::Initialize(); @@ -863,7 +879,7 @@ wxString wxIPV4address::IPAddress() const return wxString::Format ( - "%lu.%lu.%lu.%lu", + "%u.%u.%u.%u", (addr >> 24) & 0xff, (addr >> 16) & 0xff, (addr >> 8) & 0xff,