diff --git a/Libraries/LibCore/AddressInfoVector.cpp b/Libraries/LibCore/AddressInfoVector.cpp new file mode 100644 index 00000000000..54b7f017f27 --- /dev/null +++ b/Libraries/LibCore/AddressInfoVector.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022, Lucas Chollet + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#if defined(AK_OS_WINDOWS) +# include +#else +# include +# include +# include +#endif + +namespace Core::System { + +AddressInfoVector::AddressInfoVector(Vector addresses, struct addrinfo* ptr) + : m_addresses(move(addresses)) + , m_ptr(adopt_own_if_nonnull(ptr)) +{ +} + +AddressInfoVector::~AddressInfoVector() = default; + +void AddressInfoVector::AddrInfoDeleter::operator()(struct addrinfo* ptr) +{ + if (ptr) + ::freeaddrinfo(ptr); +} + +} diff --git a/Libraries/LibCore/AddressInfoVector.h b/Libraries/LibCore/AddressInfoVector.h new file mode 100644 index 00000000000..9e61dd16e3a --- /dev/null +++ b/Libraries/LibCore/AddressInfoVector.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022, Lucas Chollet + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +struct addrinfo; + +namespace Core::System { + +class AddressInfoVector { + AK_MAKE_NONCOPYABLE(AddressInfoVector); + AK_MAKE_DEFAULT_MOVABLE(AddressInfoVector); + +public: + AddressInfoVector(Vector addresses, struct addrinfo* ptr); + ~AddressInfoVector(); + + ReadonlySpan addresses() const { return m_addresses; } + +private: + struct AddrInfoDeleter { + void operator()(struct addrinfo*); + }; + + Vector m_addresses; + OwnPtr m_ptr; +}; + +} diff --git a/Libraries/LibCore/CMakeLists.txt b/Libraries/LibCore/CMakeLists.txt index 2a902a345cf..9ff67cd7b85 100644 --- a/Libraries/LibCore/CMakeLists.txt +++ b/Libraries/LibCore/CMakeLists.txt @@ -1,6 +1,7 @@ # These are the minimal set of sources needed to build the code generators. We separate them to allow # LibCore to depend on generated sources. set(SOURCES + AddressInfoVector.cpp ArgsParser.cpp Directory.cpp DirectoryEntry.cpp diff --git a/Libraries/LibCore/System.h b/Libraries/LibCore/System.h index c9eeeb6d559..25325a85a48 100644 --- a/Libraries/LibCore/System.h +++ b/Libraries/LibCore/System.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -141,36 +142,6 @@ ErrorOr waitpid(pid_t waitee, int options = 0); ErrorOr fchown(int fd, uid_t, gid_t); #endif -class AddressInfoVector { - AK_MAKE_NONCOPYABLE(AddressInfoVector); - AK_MAKE_DEFAULT_MOVABLE(AddressInfoVector); - -public: - ~AddressInfoVector() = default; - - ReadonlySpan addresses() const { return m_addresses; } - -private: - friend ErrorOr getaddrinfo(char const* nodename, char const* servname, struct addrinfo const& hints); - - AddressInfoVector(Vector&& addresses, struct addrinfo* ptr) - : m_addresses(move(addresses)) - , m_ptr(adopt_own_if_nonnull(ptr)) - { - } - - struct AddrInfoDeleter { - void operator()(struct addrinfo* ptr) - { - if (ptr) - ::freeaddrinfo(ptr); - } - }; - - Vector m_addresses {}; - OwnPtr m_ptr {}; -}; - ErrorOr getaddrinfo(char const* nodename, char const* servname, struct addrinfo const& hints); unsigned hardware_concurrency();