added Utilities::cwd

This commit is contained in:
Michele Caini 2016-09-05 21:57:53 +02:00
parent 59d4ee3df7
commit 62dc2f468f

View File

@ -232,6 +232,9 @@ struct InterfaceAddress {
namespace details {
static constexpr std::size_t DEFAULT_SIZE = 128;
template<typename>
struct IpTraits;
@ -258,12 +261,12 @@ struct IpTraits<IPv6> {
};
template<typename I, typename..., std::size_t N = 128>
template<typename I>
Addr address(const typename details::IpTraits<I>::Type *aptr) noexcept {
Addr addr;
char name[N];
char name[DEFAULT_SIZE];
int err = details::IpTraits<I>::nameFunc(aptr, name, N);
int err = details::IpTraits<I>::nameFunc(aptr, name, DEFAULT_SIZE);
if(0 == err) {
addr.port = ntohs(details::IpTraits<I>::sinPort(aptr));
@ -291,16 +294,16 @@ Addr address(F &&f, const H *handle) noexcept {
}
template<typename F, typename H, typename..., std::size_t N = 128>
std::string path(F &&f, H *handle) noexcept {
std::size_t size = N;
template<typename F, typename... Args>
std::string path(F &&f, Args... args) noexcept {
std::size_t size = DEFAULT_SIZE;
char buf[size];
std::string str{};
auto err = std::forward<F>(f)(handle, buf, &size);
auto err = std::forward<F>(f)(args..., buf, &size);
if(UV_ENOBUFS == err) {
std::unique_ptr<char[]> data{new char[size]};
err = std::forward<F>(f)(handle, data.get(), &size);
err = std::forward<F>(f)(args..., data.get(), &size);
if(0 == err) {
str = data.get();
@ -533,6 +536,14 @@ struct Utilities {
return uv_hrtime();
}
/**
* @brief Gets the current working directory.
* @return The current working directory.
*/
static std::string cwd() noexcept {
return details::path(&uv_cwd);
}
/**
* @brief Changes the current working directory.
* @param dir The working directory to be set.
@ -549,7 +560,6 @@ struct Utilities {
*
* * uv_getrusage
* * uv_exepath
* * uv_cwd
* * uv_os_homedir
* * uv_os_tmpdir
* * uv_os_get_passwd