Chris@16: /* Chris@16: * Distributed under the Boost Software License, Version 1.0.(See accompanying Chris@16: * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) Chris@16: * Chris@16: * See http://www.boost.org/libs/iostreams for documentation. Chris@16: Chris@16: * File: boost/iostreams/detail/execute.hpp Chris@16: * Date: Thu Dec 06 13:21:54 MST 2007 Chris@16: * Copyright: 2007-2008 CodeRage, LLC Chris@16: * Author: Jonathan Turkanis Chris@16: * Contact: turkanis at coderage dot com Chris@16: * Chris@16: * Defines the function boost::iostreams::detail::current_directory, used by Chris@16: * boost::iostreams::detail::absolute_path. Chris@16: */ Chris@16: Chris@16: #ifndef BOOST_IOSTREAMS_DETAIL_CURRENT_DIRECTORY_HPP_INCLUDED Chris@16: #define BOOST_IOSTREAMS_DETAIL_CURRENT_DIRECTORY_HPP_INCLUDED Chris@16: Chris@16: #include // make sure size_t is in std. Chris@16: #include // size_t Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #ifdef BOOST_IOSTREAMS_WINDOWS Chris@16: # define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers Chris@16: # include Chris@16: #else Chris@16: # include // sysconf. Chris@16: #endif Chris@16: Chris@16: // Must come last. Chris@16: #include Chris@16: Chris@16: namespace boost { namespace iostreams { namespace detail { Chris@16: Chris@16: // Returns the current working directory Chris@16: inline std::string current_directory() Chris@16: { Chris@16: #ifdef BOOST_IOSTREAMS_WINDOWS Chris@16: DWORD length; Chris@16: basic_buffer buf(MAX_PATH); Chris@16: while (true) { Chris@16: length = ::GetCurrentDirectoryA(buf.size(), buf.data()); Chris@16: if (!length) Chris@16: throw_system_failure("failed determining current directory"); Chris@16: if (length < static_cast(buf.size())) Chris@16: break; Chris@16: buf.resize(buf.size() * 2); Chris@16: } Chris@16: return std::string(buf.data(), length); Chris@16: #else // #ifdef BOOST_IOSTREAMS_WINDOWS Chris@16: basic_buffer buf(pathconf(".", _PC_PATH_MAX)); Chris@16: if (!getcwd(buf.data(), static_cast(buf.size()))) Chris@16: throw_system_failure("failed determining current directory"); Chris@16: return std::string(buf.data()); Chris@16: #endif // #ifdef BOOST_IOSTREAMS_WINDOWS Chris@16: } Chris@16: Chris@16: } } } // End namespaces detail, iostreams, boost. Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // #ifndef BOOST_IOSTREAMS_DETAIL_CURRENT_DIRECTORY_HPP_INCLUDED