libzypp  17.36.3
sockaddr.cpp
Go to the documentation of this file.
1 #include "sockaddr.h"
2 #include <sys/un.h>
3 
4 namespace zyppng {
5 
6  UnixSockAddr::UnixSockAddr(const std::string &path , bool abstract ) : _data( std::make_shared<struct sockaddr_un>() )
7  {
8  memset( _data.get(), 0, size() );
9 
10  _data->sun_family = AF_UNIX;
11  if ( path.size() ) {
12  const auto align = abstract ? 1 : 0;
13  path.copy( _data->sun_path + align, sizeof( _data->sun_path ) - align - 1 );
14  }
15  }
16 
17  sockaddr *UnixSockAddr::nativeSockAddr() const
18  {
19  return reinterpret_cast<sockaddr *>(_data.get());
20  }
21 
22  std::size_t UnixSockAddr::size() const
23  {
24  return sizeof(struct sockaddr_un);
25  }
26 
28  {
29  return _data->sun_path[0];
30  }
31 
32 }
UnixSockAddr(const std::string &path, bool abstract)
Definition: sockaddr.cpp:6
sockaddr * nativeSockAddr() const override
Definition: sockaddr.cpp:17
Definition: Arch.h:363
bool isAbstract() const
Definition: sockaddr.cpp:27
std::size_t size() const override
Definition: sockaddr.cpp:22
std::shared_ptr< struct sockaddr_un > _data
Definition: sockaddr.h:50