mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-28 19:51:58 +01:00
fixed GH #2042: Android abstract namespace local socket address
This commit is contained in:
@@ -268,7 +268,7 @@ inline void SocketAddress::newLocal(const sockaddr_un* sockAddr)
|
||||
|
||||
inline void SocketAddress::newLocal(const std::string& path)
|
||||
{
|
||||
_pImpl = new Poco::Net::Impl::LocalSocketAddressImpl(path.c_str());
|
||||
_pImpl = new Poco::Net::Impl::LocalSocketAddressImpl(path.c_str(), path.size());
|
||||
}
|
||||
#endif // POCO_OS_FAMILY_UNIX
|
||||
|
||||
|
||||
@@ -185,6 +185,7 @@ class Net_API LocalSocketAddressImpl: public SocketAddressImpl
|
||||
public:
|
||||
LocalSocketAddressImpl(const struct sockaddr_un* addr);
|
||||
LocalSocketAddressImpl(const char* path);
|
||||
LocalSocketAddressImpl(const char* path, std::size_t length);
|
||||
~LocalSocketAddressImpl();
|
||||
IPAddress host() const;
|
||||
UInt16 port() const;
|
||||
|
||||
@@ -144,6 +144,8 @@ LocalSocketAddressImpl::LocalSocketAddressImpl(const struct sockaddr_un* addr)
|
||||
|
||||
LocalSocketAddressImpl::LocalSocketAddressImpl(const char* path)
|
||||
{
|
||||
poco_assert (std::strlen(path) < sizeof(_pAddr->sun_path));
|
||||
|
||||
_pAddr = new sockaddr_un;
|
||||
poco_set_sun_len(_pAddr, std::strlen(path) + sizeof(struct sockaddr_un) - sizeof(_pAddr->sun_path) + 1);
|
||||
_pAddr->sun_family = AF_UNIX;
|
||||
@@ -151,6 +153,18 @@ LocalSocketAddressImpl::LocalSocketAddressImpl(const char* path)
|
||||
}
|
||||
|
||||
|
||||
LocalSocketAddressImpl::LocalSocketAddressImpl(const char* path, std::size_t length)
|
||||
{
|
||||
poco_assert (length < sizeof(_pAddr->sun_path));
|
||||
|
||||
_pAddr = new sockaddr_un;
|
||||
poco_set_sun_len(_pAddr, length + sizeof(struct sockaddr_un) - sizeof(_pAddr->sun_path) + 1);
|
||||
_pAddr->sun_family = AF_UNIX;
|
||||
std::memcpy(_pAddr->sun_path, path, length);
|
||||
_pAddr->sun_path[length] = 0;
|
||||
}
|
||||
|
||||
|
||||
LocalSocketAddressImpl::~LocalSocketAddressImpl()
|
||||
{
|
||||
delete _pAddr;
|
||||
|
||||
Reference in New Issue
Block a user