Error File::Duplicate (const File &rhs) { Error error; if (IsValid ()) Close(); if (rhs.DescriptorIsValid()) { #ifdef _WIN32 m_descriptor = ::_dup(rhs.GetDescriptor()); #else m_descriptor = ::fcntl(rhs.GetDescriptor(), F_DUPFD); #endif if (!DescriptorIsValid()) error.SetErrorToErrno(); else { m_options = rhs.m_options; m_own_descriptor = true; } } else { error.SetErrorString ("invalid file to duplicate"); } return error; }