From 21563d532fef35a9e99bcdd97665d1405c38ac2b Mon Sep 17 00:00:00 2001
From: Beman
Date: Mon, 2 Dec 2013 13:54:25 -0500
Subject: [PATCH 01/12] Meaningless extra line added just to test modular
boost.
---
test/Jamfile.v2 | 1 +
1 file changed, 1 insertion(+)
diff --git a/test/Jamfile.v2 b/test/Jamfile.v2
index 1785f55..4c5bd81 100644
--- a/test/Jamfile.v2
+++ b/test/Jamfile.v2
@@ -7,6 +7,7 @@
# See library home page at http://www.boost.org/libs/system
+
project
: requirements
/boost/system//boost_system
From 2c620a4f3ac378b616b0be97b7c3ccc7d057e35e Mon Sep 17 00:00:00 2001
From: Tim Blechmann
Date: Sat, 4 Jan 2014 12:36:44 +0100
Subject: [PATCH 02/12] fix header-only use of error codes
BOOST_ERROR_CODE_HEADER_ONLY was not working when the headers are separated
from the sources (e.g. when installing the headers to fhs-style /usr/include
or the like). to avoid this, we move the implementation to an .ipp file
Signed-off-by: Tim Blechmann
---
include/boost/system/detail/error_code.ipp | 479 +++++++++++++++++++++
include/boost/system/error_code.hpp | 4 +-
src/error_code.cpp | 467 +-------------------
3 files changed, 483 insertions(+), 467 deletions(-)
create mode 100644 include/boost/system/detail/error_code.ipp
diff --git a/include/boost/system/detail/error_code.ipp b/include/boost/system/detail/error_code.ipp
new file mode 100644
index 0000000..57a611f
--- /dev/null
+++ b/include/boost/system/detail/error_code.ipp
@@ -0,0 +1,479 @@
+// error_code support implementation file ----------------------------------//
+
+// Copyright Beman Dawes 2002, 2006
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// See library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------//
+
+#include
+
+// define BOOST_SYSTEM_SOURCE so that knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_SYSTEM_SOURCE
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include // for strerror/strerror_r
+
+# if defined( BOOST_WINDOWS_API )
+# include
+# if !defined(WINAPI_FAMILY) || ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
+# include "local_free_on_destruction.hpp"
+# endif
+# ifndef ERROR_INCORRECT_SIZE
+# define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS
+# endif
+# endif
+
+//----------------------------------------------------------------------------//
+namespace boost
+{
+ namespace system
+ {
+
+namespace
+{
+
+ // standard error categories ---------------------------------------------//
+
+ class generic_error_category : public error_category
+ {
+ public:
+ generic_error_category(){}
+ const char * name() const BOOST_SYSTEM_NOEXCEPT;
+ std::string message( int ev ) const;
+ };
+
+ class system_error_category : public error_category
+ {
+ public:
+ system_error_category(){}
+ const char * name() const BOOST_SYSTEM_NOEXCEPT;
+ std::string message( int ev ) const;
+ error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
+ };
+
+ // generic_error_category implementation ---------------------------------//
+
+ const char * generic_error_category::name() const BOOST_SYSTEM_NOEXCEPT
+ {
+ return "generic";
+ }
+
+ std::string generic_error_category::message( int ev ) const
+ {
+ using namespace boost::system::errc;
+#if defined(__PGI)
+ using boost::system::errc::invalid_argument;
+#endif
+
+ static std::string unknown_err( "Unknown error" );
+ // strerror_r is preferred because it is always thread safe,
+ // however, we fallback to strerror in certain cases because:
+ // -- Windows doesn't provide strerror_r.
+ // -- HP and Sun do provide strerror_r on newer systems, but there is
+ // no way to tell if is available at runtime and in any case their
+ // versions of strerror are thread safe anyhow.
+ // -- Linux only sometimes provides strerror_r.
+ // -- Tru64 provides strerror_r only when compiled -pthread.
+ // -- VMS doesn't provide strerror_r, but on this platform, strerror is
+ // thread safe.
+ # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\
+ || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\
+ || (defined(__osf__) && !defined(_REENTRANT))\
+ || (defined(__INTEGRITY))\
+ || (defined(__vms))\
+ || (defined(__QNXNTO__))
+ const char * c_str = std::strerror( ev );
+ return c_str
+ ? std::string( c_str )
+ : unknown_err;
+ # else // use strerror_r
+ char buf[64];
+ char * bp = buf;
+ std::size_t sz = sizeof(buf);
+ # if defined(__CYGWIN__) || defined(__USE_GNU)
+ // Oddball version of strerror_r
+ const char * c_str = strerror_r( ev, bp, sz );
+ return c_str
+ ? std::string( c_str )
+ : unknown_err;
+ # else
+ // POSIX version of strerror_r
+ int result;
+ for (;;)
+ {
+ // strerror_r returns 0 on success, otherwise ERANGE if buffer too small,
+ // invalid_argument if ev not a valid error number
+ # if defined (__sgi)
+ const char * c_str = strerror( ev );
+ result = 0;
+ return c_str
+ ? std::string( c_str )
+ : unknown_err;
+ # else
+ result = strerror_r( ev, bp, sz );
+ # endif
+ if (result == 0 )
+ break;
+ else
+ {
+ # if defined(__linux)
+ // Linux strerror_r returns -1 on error, with error number in errno
+ result = errno;
+ # endif
+ if ( result != ERANGE ) break;
+ if ( sz > sizeof(buf) ) std::free( bp );
+ sz *= 2;
+ if ( (bp = static_cast(std::malloc( sz ))) == 0 )
+ return std::string( "ENOMEM" );
+ }
+ }
+ std::string msg;
+# ifndef BOOST_NO_EXCEPTIONS
+ try
+# endif
+ {
+ msg = ( ( result == invalid_argument ) ? "Unknown error" : bp );
+ }
+
+# ifndef BOOST_NO_EXCEPTIONS
+ // See ticket #2098
+ catch(...)
+ {
+ // just eat the exception
+ }
+# endif
+
+ if ( sz > sizeof(buf) ) std::free( bp );
+ sz = 0;
+ return msg;
+ # endif // else POSIX version of strerror_r
+ # endif // else use strerror_r
+ }
+ // system_error_category implementation --------------------------------//
+
+ const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT
+ {
+ return "system";
+ }
+
+ error_condition system_error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
+ {
+ using namespace boost::system::errc;
+#if defined(__PGI)
+ using boost::system::errc::invalid_argument;
+#endif
+
+# if defined(BOOST_WINDOWS_API)
+# if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_APP) != 0)
+ // When using the Windows Runtime, most system errors are reported as HRESULTs.
+ // We want to map the common Win32 errors to their equivalent error condition,
+ // whether or not they are reported via an HRESULT.
+ if ( ev < 0 ) // Check for failed HRESULTs only.
+ if ( HRESULT_FACILITY( ev ) == FACILITY_WIN32 )
+ ev = HRESULT_CODE( ev );
+# endif
+# endif
+
+ switch ( ev )
+ {
+ case 0: return make_error_condition( success );
+# if defined(BOOST_POSIX_API)
+ // POSIX-like O/S -> posix_errno decode table ---------------------------//
+ case E2BIG: return make_error_condition( argument_list_too_long );
+ case EACCES: return make_error_condition( permission_denied );
+ case EADDRINUSE: return make_error_condition( address_in_use );
+ case EADDRNOTAVAIL: return make_error_condition( address_not_available );
+ case EAFNOSUPPORT: return make_error_condition( address_family_not_supported );
+ case EAGAIN: return make_error_condition( resource_unavailable_try_again );
+# if EALREADY != EBUSY // EALREADY and EBUSY are the same on QNX Neutrino
+ case EALREADY: return make_error_condition( connection_already_in_progress );
+# endif
+ case EBADF: return make_error_condition( bad_file_descriptor );
+ case EBADMSG: return make_error_condition( bad_message );
+ case EBUSY: return make_error_condition( device_or_resource_busy );
+ case ECANCELED: return make_error_condition( operation_canceled );
+ case ECHILD: return make_error_condition( no_child_process );
+ case ECONNABORTED: return make_error_condition( connection_aborted );
+ case ECONNREFUSED: return make_error_condition( connection_refused );
+ case ECONNRESET: return make_error_condition( connection_reset );
+ case EDEADLK: return make_error_condition( resource_deadlock_would_occur );
+ case EDESTADDRREQ: return make_error_condition( destination_address_required );
+ case EDOM: return make_error_condition( argument_out_of_domain );
+ case EEXIST: return make_error_condition( file_exists );
+ case EFAULT: return make_error_condition( bad_address );
+ case EFBIG: return make_error_condition( file_too_large );
+ case EHOSTUNREACH: return make_error_condition( host_unreachable );
+ case EIDRM: return make_error_condition( identifier_removed );
+ case EILSEQ: return make_error_condition( illegal_byte_sequence );
+ case EINPROGRESS: return make_error_condition( operation_in_progress );
+ case EINTR: return make_error_condition( interrupted );
+ case EINVAL: return make_error_condition( invalid_argument );
+ case EIO: return make_error_condition( io_error );
+ case EISCONN: return make_error_condition( already_connected );
+ case EISDIR: return make_error_condition( is_a_directory );
+ case ELOOP: return make_error_condition( too_many_symbolic_link_levels );
+ case EMFILE: return make_error_condition( too_many_files_open );
+ case EMLINK: return make_error_condition( too_many_links );
+ case EMSGSIZE: return make_error_condition( message_size );
+ case ENAMETOOLONG: return make_error_condition( filename_too_long );
+ case ENETDOWN: return make_error_condition( network_down );
+ case ENETRESET: return make_error_condition( network_reset );
+ case ENETUNREACH: return make_error_condition( network_unreachable );
+ case ENFILE: return make_error_condition( too_many_files_open_in_system );
+ case ENOBUFS: return make_error_condition( no_buffer_space );
+ case ENODATA: return make_error_condition( no_message_available );
+ case ENODEV: return make_error_condition( no_such_device );
+ case ENOENT: return make_error_condition( no_such_file_or_directory );
+ case ENOEXEC: return make_error_condition( executable_format_error );
+ case ENOLCK: return make_error_condition( no_lock_available );
+ case ENOLINK: return make_error_condition( no_link );
+ case ENOMEM: return make_error_condition( not_enough_memory );
+ case ENOMSG: return make_error_condition( no_message );
+ case ENOPROTOOPT: return make_error_condition( no_protocol_option );
+ case ENOSPC: return make_error_condition( no_space_on_device );
+ case ENOSR: return make_error_condition( no_stream_resources );
+ case ENOSTR: return make_error_condition( not_a_stream );
+ case ENOSYS: return make_error_condition( function_not_supported );
+ case ENOTCONN: return make_error_condition( not_connected );
+ case ENOTDIR: return make_error_condition( not_a_directory );
+ # if ENOTEMPTY != EEXIST // AIX treats ENOTEMPTY and EEXIST as the same value
+ case ENOTEMPTY: return make_error_condition( directory_not_empty );
+ # endif // ENOTEMPTY != EEXIST
+ # if ENOTRECOVERABLE != ECONNRESET // the same on some Broadcom chips
+ case ENOTRECOVERABLE: return make_error_condition( state_not_recoverable );
+ # endif // ENOTRECOVERABLE != ECONNRESET
+ case ENOTSOCK: return make_error_condition( not_a_socket );
+ case ENOTSUP: return make_error_condition( not_supported );
+ case ENOTTY: return make_error_condition( inappropriate_io_control_operation );
+ case ENXIO: return make_error_condition( no_such_device_or_address );
+ # if EOPNOTSUPP != ENOTSUP
+ case EOPNOTSUPP: return make_error_condition( operation_not_supported );
+ # endif // EOPNOTSUPP != ENOTSUP
+ case EOVERFLOW: return make_error_condition( value_too_large );
+ # if EOWNERDEAD != ECONNABORTED // the same on some Broadcom chips
+ case EOWNERDEAD: return make_error_condition( owner_dead );
+ # endif // EOWNERDEAD != ECONNABORTED
+ case EPERM: return make_error_condition( operation_not_permitted );
+ case EPIPE: return make_error_condition( broken_pipe );
+ case EPROTO: return make_error_condition( protocol_error );
+ case EPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
+ case EPROTOTYPE: return make_error_condition( wrong_protocol_type );
+ case ERANGE: return make_error_condition( result_out_of_range );
+ case EROFS: return make_error_condition( read_only_file_system );
+ case ESPIPE: return make_error_condition( invalid_seek );
+ case ESRCH: return make_error_condition( no_such_process );
+ case ETIME: return make_error_condition( stream_timeout );
+ case ETIMEDOUT: return make_error_condition( timed_out );
+ case ETXTBSY: return make_error_condition( text_file_busy );
+ # if EAGAIN != EWOULDBLOCK
+ case EWOULDBLOCK: return make_error_condition( operation_would_block );
+ # endif // EAGAIN != EWOULDBLOCK
+ case EXDEV: return make_error_condition( cross_device_link );
+ #else
+ // Windows system -> posix_errno decode table ---------------------------//
+ // see WinError.h comments for descriptions of errors
+ case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied );
+ case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists );
+ case ERROR_BAD_UNIT: return make_error_condition( no_such_device );
+ case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long );
+ case ERROR_BUSY: return make_error_condition( device_or_resource_busy );
+ case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy );
+ case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied );
+ case ERROR_CANTOPEN: return make_error_condition( io_error );
+ case ERROR_CANTREAD: return make_error_condition( io_error );
+ case ERROR_CANTWRITE: return make_error_condition( io_error );
+ case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied );
+ case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device );
+ case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy );
+ case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty );
+ case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: "The directory name is invalid"
+ case ERROR_DISK_FULL: return make_error_condition( no_space_on_device );
+ case ERROR_FILE_EXISTS: return make_error_condition( file_exists );
+ case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
+ case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device );
+ case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied );
+ case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device );
+ case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported );
+ case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument );
+ case ERROR_INVALID_NAME: return make_error_condition( invalid_argument );
+ case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available );
+ case ERROR_LOCKED: return make_error_condition( no_lock_available );
+ case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument );
+ case ERROR_NOACCESS: return make_error_condition( permission_denied );
+ case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory );
+ case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again );
+ case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link );
+ case ERROR_OPEN_FAILED: return make_error_condition( io_error );
+ case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy );
+ case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled );
+ case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory );
+ case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
+ case ERROR_READ_FAULT: return make_error_condition( io_error );
+ case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again );
+ case ERROR_SEEK: return make_error_condition( io_error );
+ case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied );
+ case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open );
+ case ERROR_WRITE_FAULT: return make_error_condition( io_error );
+ case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied );
+ case WSAEACCES: return make_error_condition( permission_denied );
+ case WSAEADDRINUSE: return make_error_condition( address_in_use );
+ case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available );
+ case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported );
+ case WSAEALREADY: return make_error_condition( connection_already_in_progress );
+ case WSAEBADF: return make_error_condition( bad_file_descriptor );
+ case WSAECONNABORTED: return make_error_condition( connection_aborted );
+ case WSAECONNREFUSED: return make_error_condition( connection_refused );
+ case WSAECONNRESET: return make_error_condition( connection_reset );
+ case WSAEDESTADDRREQ: return make_error_condition( destination_address_required );
+ case WSAEFAULT: return make_error_condition( bad_address );
+ case WSAEHOSTUNREACH: return make_error_condition( host_unreachable );
+ case WSAEINPROGRESS: return make_error_condition( operation_in_progress );
+ case WSAEINTR: return make_error_condition( interrupted );
+ case WSAEINVAL: return make_error_condition( invalid_argument );
+ case WSAEISCONN: return make_error_condition( already_connected );
+ case WSAEMFILE: return make_error_condition( too_many_files_open );
+ case WSAEMSGSIZE: return make_error_condition( message_size );
+ case WSAENAMETOOLONG: return make_error_condition( filename_too_long );
+ case WSAENETDOWN: return make_error_condition( network_down );
+ case WSAENETRESET: return make_error_condition( network_reset );
+ case WSAENETUNREACH: return make_error_condition( network_unreachable );
+ case WSAENOBUFS: return make_error_condition( no_buffer_space );
+ case WSAENOPROTOOPT: return make_error_condition( no_protocol_option );
+ case WSAENOTCONN: return make_error_condition( not_connected );
+ case WSAENOTSOCK: return make_error_condition( not_a_socket );
+ case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported );
+ case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
+ case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type );
+ case WSAETIMEDOUT: return make_error_condition( timed_out );
+ case WSAEWOULDBLOCK: return make_error_condition( operation_would_block );
+ #endif
+ default: return error_condition( ev, system_category() );
+ }
+ }
+
+# if !defined( BOOST_WINDOWS_API )
+
+ std::string system_error_category::message( int ev ) const
+ {
+ return generic_category().message( ev );
+ }
+# else
+
+ std::string system_error_category::message( int ev ) const
+ {
+# if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) == 0)
+ std::string str( 128, char() );
+ for (;;)
+ {
+ DWORD retval = ::FormatMessageA(
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ ev,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ &str[0],
+ str.size(),
+ NULL
+ );
+
+ if ( retval > 0 )
+ {
+ str.resize( retval );
+ break;
+ }
+ else if ( ::GetLastError() != ERROR_INSUFFICIENT_BUFFER )
+ {
+ return std::string("Unknown error");
+ }
+ else
+ {
+ str.resize( str.size() + str.size()/2 );
+ }
+ }
+# elif !defined(BOOST_NO_ANSI_APIS)
+ LPVOID lpMsgBuf = 0;
+ DWORD retval = ::FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ ev,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPSTR) &lpMsgBuf,
+ 0,
+ NULL
+ );
+ detail::local_free_on_destruction lfod(lpMsgBuf);
+ if (retval == 0)
+ return std::string("Unknown error");
+
+ std::string str( static_cast(lpMsgBuf) );
+# else // WinCE workaround
+ LPVOID lpMsgBuf = 0;
+ DWORD retval = ::FormatMessageW(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ ev,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPWSTR) &lpMsgBuf,
+ 0,
+ NULL
+ );
+ detail::local_free_on_destruction lfod(lpMsgBuf);
+ if (retval == 0)
+ return std::string("Unknown error");
+
+ int num_chars = (wcslen( static_cast(lpMsgBuf) ) + 1) * 2;
+ LPSTR narrow_buffer = (LPSTR)_alloca( num_chars );
+ if (::WideCharToMultiByte(CP_ACP, 0, static_cast(lpMsgBuf), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
+ return std::string("Unknown error");
+
+ std::string str( narrow_buffer );
+# endif
+ while ( str.size()
+ && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') )
+ str.erase( str.size()-1 );
+ if ( str.size() && str[str.size()-1] == '.' )
+ { str.erase( str.size()-1 ); }
+ return str;
+ }
+# endif
+
+} // unnamed namespace
+
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+ BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code;
+ // note that it doesn't matter if this
+ // isn't initialized before use since
+ // the only use is to take its
+ // address for comparison purposes
+# endif
+
+ BOOST_SYSTEM_DECL const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
+ {
+ static const system_error_category system_category_const;
+ return system_category_const;
+ }
+
+ BOOST_SYSTEM_DECL const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
+ {
+ static const generic_error_category generic_category_const;
+ return generic_category_const;
+ }
+
+ } // namespace system
+} // namespace boost
diff --git a/include/boost/system/error_code.hpp b/include/boost/system/error_code.hpp
index 812e779..fe969e3 100644
--- a/include/boost/system/error_code.hpp
+++ b/include/boost/system/error_code.hpp
@@ -382,7 +382,7 @@ namespace boost
{
return m_val == 0;
}
-# endif
+# endif
// relationals:
inline friend bool operator==( const error_code & lhs,
@@ -527,7 +527,7 @@ namespace boost
#include // pops abi_prefix.hpp pragmas
# ifdef BOOST_ERROR_CODE_HEADER_ONLY
-# include
+# include
# endif
#endif // BOOST_ERROR_CODE_HPP
diff --git a/src/error_code.cpp b/src/error_code.cpp
index 5e00588..a9a8686 100644
--- a/src/error_code.cpp
+++ b/src/error_code.cpp
@@ -9,471 +9,8 @@
//----------------------------------------------------------------------------//
-#include
-
-// define BOOST_SYSTEM_SOURCE so that knows
-// the library is being built (possibly exporting rather than importing code)
-#define BOOST_SYSTEM_SOURCE
-
-#include
#include
-#include
-#include
-#include
-#include
-#include // for strerror/strerror_r
-
-# if defined( BOOST_WINDOWS_API )
-# include
-# if !defined(WINAPI_FAMILY) || ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
-# include "local_free_on_destruction.hpp"
-# endif
-# ifndef ERROR_INCORRECT_SIZE
-# define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS
-# endif
-# endif
-
-//----------------------------------------------------------------------------//
-namespace boost
-{
- namespace system
- {
-
-namespace
-{
-
- // standard error categories ---------------------------------------------//
-
- class generic_error_category : public error_category
- {
- public:
- generic_error_category(){}
- const char * name() const BOOST_SYSTEM_NOEXCEPT;
- std::string message( int ev ) const;
- };
-
- class system_error_category : public error_category
- {
- public:
- system_error_category(){}
- const char * name() const BOOST_SYSTEM_NOEXCEPT;
- std::string message( int ev ) const;
- error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
- };
-
- // generic_error_category implementation ---------------------------------//
-
- const char * generic_error_category::name() const BOOST_SYSTEM_NOEXCEPT
- {
- return "generic";
- }
-
- std::string generic_error_category::message( int ev ) const
- {
- using namespace boost::system::errc;
-#if defined(__PGI)
- using boost::system::errc::invalid_argument;
+#ifndef BOOST_ERROR_CODE_HEADER_ONLY
+#include
#endif
-
- static std::string unknown_err( "Unknown error" );
- // strerror_r is preferred because it is always thread safe,
- // however, we fallback to strerror in certain cases because:
- // -- Windows doesn't provide strerror_r.
- // -- HP and Sun do provide strerror_r on newer systems, but there is
- // no way to tell if is available at runtime and in any case their
- // versions of strerror are thread safe anyhow.
- // -- Linux only sometimes provides strerror_r.
- // -- Tru64 provides strerror_r only when compiled -pthread.
- // -- VMS doesn't provide strerror_r, but on this platform, strerror is
- // thread safe.
- # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\
- || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\
- || (defined(__osf__) && !defined(_REENTRANT))\
- || (defined(__INTEGRITY))\
- || (defined(__vms))\
- || (defined(__QNXNTO__))
- const char * c_str = std::strerror( ev );
- return c_str
- ? std::string( c_str )
- : unknown_err;
- # else // use strerror_r
- char buf[64];
- char * bp = buf;
- std::size_t sz = sizeof(buf);
- # if defined(__CYGWIN__) || defined(__USE_GNU)
- // Oddball version of strerror_r
- const char * c_str = strerror_r( ev, bp, sz );
- return c_str
- ? std::string( c_str )
- : unknown_err;
- # else
- // POSIX version of strerror_r
- int result;
- for (;;)
- {
- // strerror_r returns 0 on success, otherwise ERANGE if buffer too small,
- // invalid_argument if ev not a valid error number
- # if defined (__sgi)
- const char * c_str = strerror( ev );
- result = 0;
- return c_str
- ? std::string( c_str )
- : unknown_err;
- # else
- result = strerror_r( ev, bp, sz );
- # endif
- if (result == 0 )
- break;
- else
- {
- # if defined(__linux)
- // Linux strerror_r returns -1 on error, with error number in errno
- result = errno;
- # endif
- if ( result != ERANGE ) break;
- if ( sz > sizeof(buf) ) std::free( bp );
- sz *= 2;
- if ( (bp = static_cast(std::malloc( sz ))) == 0 )
- return std::string( "ENOMEM" );
- }
- }
- std::string msg;
-# ifndef BOOST_NO_EXCEPTIONS
- try
-# endif
- {
- msg = ( ( result == invalid_argument ) ? "Unknown error" : bp );
- }
-
-# ifndef BOOST_NO_EXCEPTIONS
- // See ticket #2098
- catch(...)
- {
- // just eat the exception
- }
-# endif
-
- if ( sz > sizeof(buf) ) std::free( bp );
- sz = 0;
- return msg;
- # endif // else POSIX version of strerror_r
- # endif // else use strerror_r
- }
- // system_error_category implementation --------------------------------//
-
- const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT
- {
- return "system";
- }
-
- error_condition system_error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
- {
- using namespace boost::system::errc;
-#if defined(__PGI)
- using boost::system::errc::invalid_argument;
-#endif
-
-# if defined(BOOST_WINDOWS_API)
-# if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_APP) != 0)
- // When using the Windows Runtime, most system errors are reported as HRESULTs.
- // We want to map the common Win32 errors to their equivalent error condition,
- // whether or not they are reported via an HRESULT.
- if ( ev < 0 ) // Check for failed HRESULTs only.
- if ( HRESULT_FACILITY( ev ) == FACILITY_WIN32 )
- ev = HRESULT_CODE( ev );
-# endif
-# endif
-
- switch ( ev )
- {
- case 0: return make_error_condition( success );
-# if defined(BOOST_POSIX_API)
- // POSIX-like O/S -> posix_errno decode table ---------------------------//
- case E2BIG: return make_error_condition( argument_list_too_long );
- case EACCES: return make_error_condition( permission_denied );
- case EADDRINUSE: return make_error_condition( address_in_use );
- case EADDRNOTAVAIL: return make_error_condition( address_not_available );
- case EAFNOSUPPORT: return make_error_condition( address_family_not_supported );
- case EAGAIN: return make_error_condition( resource_unavailable_try_again );
-# if EALREADY != EBUSY // EALREADY and EBUSY are the same on QNX Neutrino
- case EALREADY: return make_error_condition( connection_already_in_progress );
-# endif
- case EBADF: return make_error_condition( bad_file_descriptor );
- case EBADMSG: return make_error_condition( bad_message );
- case EBUSY: return make_error_condition( device_or_resource_busy );
- case ECANCELED: return make_error_condition( operation_canceled );
- case ECHILD: return make_error_condition( no_child_process );
- case ECONNABORTED: return make_error_condition( connection_aborted );
- case ECONNREFUSED: return make_error_condition( connection_refused );
- case ECONNRESET: return make_error_condition( connection_reset );
- case EDEADLK: return make_error_condition( resource_deadlock_would_occur );
- case EDESTADDRREQ: return make_error_condition( destination_address_required );
- case EDOM: return make_error_condition( argument_out_of_domain );
- case EEXIST: return make_error_condition( file_exists );
- case EFAULT: return make_error_condition( bad_address );
- case EFBIG: return make_error_condition( file_too_large );
- case EHOSTUNREACH: return make_error_condition( host_unreachable );
- case EIDRM: return make_error_condition( identifier_removed );
- case EILSEQ: return make_error_condition( illegal_byte_sequence );
- case EINPROGRESS: return make_error_condition( operation_in_progress );
- case EINTR: return make_error_condition( interrupted );
- case EINVAL: return make_error_condition( invalid_argument );
- case EIO: return make_error_condition( io_error );
- case EISCONN: return make_error_condition( already_connected );
- case EISDIR: return make_error_condition( is_a_directory );
- case ELOOP: return make_error_condition( too_many_symbolic_link_levels );
- case EMFILE: return make_error_condition( too_many_files_open );
- case EMLINK: return make_error_condition( too_many_links );
- case EMSGSIZE: return make_error_condition( message_size );
- case ENAMETOOLONG: return make_error_condition( filename_too_long );
- case ENETDOWN: return make_error_condition( network_down );
- case ENETRESET: return make_error_condition( network_reset );
- case ENETUNREACH: return make_error_condition( network_unreachable );
- case ENFILE: return make_error_condition( too_many_files_open_in_system );
- case ENOBUFS: return make_error_condition( no_buffer_space );
- case ENODATA: return make_error_condition( no_message_available );
- case ENODEV: return make_error_condition( no_such_device );
- case ENOENT: return make_error_condition( no_such_file_or_directory );
- case ENOEXEC: return make_error_condition( executable_format_error );
- case ENOLCK: return make_error_condition( no_lock_available );
- case ENOLINK: return make_error_condition( no_link );
- case ENOMEM: return make_error_condition( not_enough_memory );
- case ENOMSG: return make_error_condition( no_message );
- case ENOPROTOOPT: return make_error_condition( no_protocol_option );
- case ENOSPC: return make_error_condition( no_space_on_device );
- case ENOSR: return make_error_condition( no_stream_resources );
- case ENOSTR: return make_error_condition( not_a_stream );
- case ENOSYS: return make_error_condition( function_not_supported );
- case ENOTCONN: return make_error_condition( not_connected );
- case ENOTDIR: return make_error_condition( not_a_directory );
- # if ENOTEMPTY != EEXIST // AIX treats ENOTEMPTY and EEXIST as the same value
- case ENOTEMPTY: return make_error_condition( directory_not_empty );
- # endif // ENOTEMPTY != EEXIST
- # if ENOTRECOVERABLE != ECONNRESET // the same on some Broadcom chips
- case ENOTRECOVERABLE: return make_error_condition( state_not_recoverable );
- # endif // ENOTRECOVERABLE != ECONNRESET
- case ENOTSOCK: return make_error_condition( not_a_socket );
- case ENOTSUP: return make_error_condition( not_supported );
- case ENOTTY: return make_error_condition( inappropriate_io_control_operation );
- case ENXIO: return make_error_condition( no_such_device_or_address );
- # if EOPNOTSUPP != ENOTSUP
- case EOPNOTSUPP: return make_error_condition( operation_not_supported );
- # endif // EOPNOTSUPP != ENOTSUP
- case EOVERFLOW: return make_error_condition( value_too_large );
- # if EOWNERDEAD != ECONNABORTED // the same on some Broadcom chips
- case EOWNERDEAD: return make_error_condition( owner_dead );
- # endif // EOWNERDEAD != ECONNABORTED
- case EPERM: return make_error_condition( operation_not_permitted );
- case EPIPE: return make_error_condition( broken_pipe );
- case EPROTO: return make_error_condition( protocol_error );
- case EPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
- case EPROTOTYPE: return make_error_condition( wrong_protocol_type );
- case ERANGE: return make_error_condition( result_out_of_range );
- case EROFS: return make_error_condition( read_only_file_system );
- case ESPIPE: return make_error_condition( invalid_seek );
- case ESRCH: return make_error_condition( no_such_process );
- case ETIME: return make_error_condition( stream_timeout );
- case ETIMEDOUT: return make_error_condition( timed_out );
- case ETXTBSY: return make_error_condition( text_file_busy );
- # if EAGAIN != EWOULDBLOCK
- case EWOULDBLOCK: return make_error_condition( operation_would_block );
- # endif // EAGAIN != EWOULDBLOCK
- case EXDEV: return make_error_condition( cross_device_link );
- #else
- // Windows system -> posix_errno decode table ---------------------------//
- // see WinError.h comments for descriptions of errors
- case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied );
- case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists );
- case ERROR_BAD_UNIT: return make_error_condition( no_such_device );
- case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long );
- case ERROR_BUSY: return make_error_condition( device_or_resource_busy );
- case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy );
- case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied );
- case ERROR_CANTOPEN: return make_error_condition( io_error );
- case ERROR_CANTREAD: return make_error_condition( io_error );
- case ERROR_CANTWRITE: return make_error_condition( io_error );
- case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied );
- case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device );
- case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy );
- case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty );
- case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: "The directory name is invalid"
- case ERROR_DISK_FULL: return make_error_condition( no_space_on_device );
- case ERROR_FILE_EXISTS: return make_error_condition( file_exists );
- case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
- case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device );
- case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied );
- case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device );
- case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported );
- case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument );
- case ERROR_INVALID_NAME: return make_error_condition( invalid_argument );
- case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available );
- case ERROR_LOCKED: return make_error_condition( no_lock_available );
- case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument );
- case ERROR_NOACCESS: return make_error_condition( permission_denied );
- case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory );
- case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again );
- case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link );
- case ERROR_OPEN_FAILED: return make_error_condition( io_error );
- case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy );
- case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled );
- case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory );
- case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
- case ERROR_READ_FAULT: return make_error_condition( io_error );
- case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again );
- case ERROR_SEEK: return make_error_condition( io_error );
- case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied );
- case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open );
- case ERROR_WRITE_FAULT: return make_error_condition( io_error );
- case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied );
- case WSAEACCES: return make_error_condition( permission_denied );
- case WSAEADDRINUSE: return make_error_condition( address_in_use );
- case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available );
- case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported );
- case WSAEALREADY: return make_error_condition( connection_already_in_progress );
- case WSAEBADF: return make_error_condition( bad_file_descriptor );
- case WSAECONNABORTED: return make_error_condition( connection_aborted );
- case WSAECONNREFUSED: return make_error_condition( connection_refused );
- case WSAECONNRESET: return make_error_condition( connection_reset );
- case WSAEDESTADDRREQ: return make_error_condition( destination_address_required );
- case WSAEFAULT: return make_error_condition( bad_address );
- case WSAEHOSTUNREACH: return make_error_condition( host_unreachable );
- case WSAEINPROGRESS: return make_error_condition( operation_in_progress );
- case WSAEINTR: return make_error_condition( interrupted );
- case WSAEINVAL: return make_error_condition( invalid_argument );
- case WSAEISCONN: return make_error_condition( already_connected );
- case WSAEMFILE: return make_error_condition( too_many_files_open );
- case WSAEMSGSIZE: return make_error_condition( message_size );
- case WSAENAMETOOLONG: return make_error_condition( filename_too_long );
- case WSAENETDOWN: return make_error_condition( network_down );
- case WSAENETRESET: return make_error_condition( network_reset );
- case WSAENETUNREACH: return make_error_condition( network_unreachable );
- case WSAENOBUFS: return make_error_condition( no_buffer_space );
- case WSAENOPROTOOPT: return make_error_condition( no_protocol_option );
- case WSAENOTCONN: return make_error_condition( not_connected );
- case WSAENOTSOCK: return make_error_condition( not_a_socket );
- case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported );
- case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
- case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type );
- case WSAETIMEDOUT: return make_error_condition( timed_out );
- case WSAEWOULDBLOCK: return make_error_condition( operation_would_block );
- #endif
- default: return error_condition( ev, system_category() );
- }
- }
-
-# if !defined( BOOST_WINDOWS_API )
-
- std::string system_error_category::message( int ev ) const
- {
- return generic_category().message( ev );
- }
-# else
-
- std::string system_error_category::message( int ev ) const
- {
-# if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) == 0)
- std::string str( 128, char() );
- for (;;)
- {
- DWORD retval = ::FormatMessageA(
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- ev,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- &str[0],
- str.size(),
- NULL
- );
-
- if ( retval > 0 )
- {
- str.resize( retval );
- break;
- }
- else if ( ::GetLastError() != ERROR_INSUFFICIENT_BUFFER )
- {
- return std::string("Unknown error");
- }
- else
- {
- str.resize( str.size() + str.size()/2 );
- }
- }
-# elif !defined(BOOST_NO_ANSI_APIS)
- LPVOID lpMsgBuf = 0;
- DWORD retval = ::FormatMessageA(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- ev,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- (LPSTR) &lpMsgBuf,
- 0,
- NULL
- );
- detail::local_free_on_destruction lfod(lpMsgBuf);
- if (retval == 0)
- return std::string("Unknown error");
-
- std::string str( static_cast(lpMsgBuf) );
-# else // WinCE workaround
- LPVOID lpMsgBuf = 0;
- DWORD retval = ::FormatMessageW(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- ev,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- (LPWSTR) &lpMsgBuf,
- 0,
- NULL
- );
- detail::local_free_on_destruction lfod(lpMsgBuf);
- if (retval == 0)
- return std::string("Unknown error");
-
- int num_chars = (wcslen( static_cast(lpMsgBuf) ) + 1) * 2;
- LPSTR narrow_buffer = (LPSTR)_alloca( num_chars );
- if (::WideCharToMultiByte(CP_ACP, 0, static_cast(lpMsgBuf), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
- return std::string("Unknown error");
-
- std::string str( narrow_buffer );
-# endif
- while ( str.size()
- && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') )
- str.erase( str.size()-1 );
- if ( str.size() && str[str.size()-1] == '.' )
- { str.erase( str.size()-1 ); }
- return str;
- }
-# endif
-
-} // unnamed namespace
-
-
-# ifndef BOOST_SYSTEM_NO_DEPRECATED
- BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code;
- // note that it doesn't matter if this
- // isn't initialized before use since
- // the only use is to take its
- // address for comparison purposes
-# endif
-
- BOOST_SYSTEM_DECL const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
- {
- static const system_error_category system_category_const;
- return system_category_const;
- }
-
- BOOST_SYSTEM_DECL const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
- {
- static const generic_error_category generic_category_const;
- return generic_category_const;
- }
-
- } // namespace system
-} // namespace boost
From 199c0cfb0b4ea632c21383fb18d6f9d516972fc0 Mon Sep 17 00:00:00 2001
From: Beman
Date: Mon, 6 Jan 2014 15:33:39 -0500
Subject: [PATCH 03/12] Remove legacy VC++ solution. Easier to rebuild from
scratch.
---
test/system_msvc/common.vsprops | 19 --
.../error_code_test/error_code_test.vcproj | 199 ------------------
.../system_msvc/system_dll/system_dll.vcxproj | 102 ---------
.../system_error_test.vcxproj | 91 --------
test/system_msvc/system_msvc.sln | 38 ----
5 files changed, 449 deletions(-)
delete mode 100644 test/system_msvc/common.vsprops
delete mode 100644 test/system_msvc/error_code_test/error_code_test.vcproj
delete mode 100644 test/system_msvc/system_dll/system_dll.vcxproj
delete mode 100644 test/system_msvc/system_error_test/system_error_test.vcxproj
delete mode 100644 test/system_msvc/system_msvc.sln
diff --git a/test/system_msvc/common.vsprops b/test/system_msvc/common.vsprops
deleted file mode 100644
index e4cc705..0000000
--- a/test/system_msvc/common.vsprops
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
diff --git a/test/system_msvc/error_code_test/error_code_test.vcproj b/test/system_msvc/error_code_test/error_code_test.vcproj
deleted file mode 100644
index f69ff01..0000000
--- a/test/system_msvc/error_code_test/error_code_test.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/system_msvc/system_dll/system_dll.vcxproj b/test/system_msvc/system_dll/system_dll.vcxproj
deleted file mode 100644
index 92e55e0..0000000
--- a/test/system_msvc/system_dll/system_dll.vcxproj
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
-
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}
- Win32Proj
- system_dll
-
-
-
- DynamicLibrary
- true
- Unicode
- v110
-
-
- DynamicLibrary
- false
- true
- Unicode
- v110
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
- false
-
-
-
-
-
- Level3
- Disabled
- WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)
-
-
- Windows
- true
-
-
-
-
-
-
-
-
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)
-
-
- Windows
- true
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/system_msvc/system_error_test/system_error_test.vcxproj b/test/system_msvc/system_error_test/system_error_test.vcxproj
deleted file mode 100644
index af9a57d..0000000
--- a/test/system_msvc/system_error_test/system_error_test.vcxproj
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
-
- {ADFCC237-53E3-47D8-949B-C520C332D9CB}
- Win32Proj
- system_error_test
-
-
-
- Application
- true
- Unicode
- v110
-
-
- Application
- false
- true
- Unicode
- v110
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
- false
-
-
-
-
-
- Level3
- Disabled
- WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
-
-
- Console
- true
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
-
-
- Console
- true
- true
- true
-
-
-
-
-
-
-
- {35e7326a-90ab-471a-ab2a-c5bcda0afd38}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/system_msvc/system_msvc.sln b/test/system_msvc/system_msvc.sln
deleted file mode 100644
index f47a4c1..0000000
--- a/test/system_msvc/system_msvc.sln
+++ /dev/null
@@ -1,38 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C++ Express 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "error_code_test", "error_code_test\error_code_test.vcxproj", "{81960557-E9A9-4E81-AC96-9E11C33CB058}"
- ProjectSection(ProjectDependencies) = postProject
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38} = {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcxproj", "{35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_error_test", "system_error_test\system_error_test.vcxproj", "{ADFCC237-53E3-47D8-949B-C520C332D9CB}"
- ProjectSection(ProjectDependencies) = postProject
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38} = {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {81960557-E9A9-4E81-AC96-9E11C33CB058}.Debug|Win32.ActiveCfg = Debug|Win32
- {81960557-E9A9-4E81-AC96-9E11C33CB058}.Debug|Win32.Build.0 = Debug|Win32
- {81960557-E9A9-4E81-AC96-9E11C33CB058}.Release|Win32.ActiveCfg = Release|Win32
- {81960557-E9A9-4E81-AC96-9E11C33CB058}.Release|Win32.Build.0 = Release|Win32
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}.Debug|Win32.ActiveCfg = Debug|Win32
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}.Debug|Win32.Build.0 = Debug|Win32
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}.Release|Win32.ActiveCfg = Release|Win32
- {35E7326A-90AB-471A-AB2A-C5BCDA0AFD38}.Release|Win32.Build.0 = Release|Win32
- {ADFCC237-53E3-47D8-949B-C520C332D9CB}.Debug|Win32.ActiveCfg = Debug|Win32
- {ADFCC237-53E3-47D8-949B-C520C332D9CB}.Debug|Win32.Build.0 = Debug|Win32
- {ADFCC237-53E3-47D8-949B-C520C332D9CB}.Release|Win32.ActiveCfg = Release|Win32
- {ADFCC237-53E3-47D8-949B-C520C332D9CB}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
From 42ee65f7452cccbdc95a127001055596f2807668 Mon Sep 17 00:00:00 2001
From: Beman
Date: Mon, 6 Jan 2014 15:37:51 -0500
Subject: [PATCH 04/12] Move src/local_free_on_destruction.hpp to
include/boost/detail. Was not being found by some VC++ versions, plus header
only builds are supposed to be possible without non-header directories even
being present.
---
include/boost/system/detail/error_code.ipp | 2 +-
.../boost/system/detail}/local_free_on_destruction.hpp | 0
2 files changed, 1 insertion(+), 1 deletion(-)
rename {src => include/boost/system/detail}/local_free_on_destruction.hpp (100%)
diff --git a/include/boost/system/detail/error_code.ipp b/include/boost/system/detail/error_code.ipp
index 57a611f..be51fbb 100644
--- a/include/boost/system/detail/error_code.ipp
+++ b/include/boost/system/detail/error_code.ipp
@@ -27,7 +27,7 @@
# if defined( BOOST_WINDOWS_API )
# include
# if !defined(WINAPI_FAMILY) || ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
-# include "local_free_on_destruction.hpp"
+# include
# endif
# ifndef ERROR_INCORRECT_SIZE
# define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS
diff --git a/src/local_free_on_destruction.hpp b/include/boost/system/detail/local_free_on_destruction.hpp
similarity index 100%
rename from src/local_free_on_destruction.hpp
rename to include/boost/system/detail/local_free_on_destruction.hpp
From 459160d1844e69828045d63ffcac65b8c67fe19e Mon Sep 17 00:00:00 2001
From: Beman
Date: Mon, 6 Jan 2014 16:52:15 -0500
Subject: [PATCH 05/12] Move BOOST_SYSTEM_SOURCE definition to
src/error_code.cpp so that automatic library variant selection is enabled.
---
include/boost/system/detail/error_code.ipp | 4 ----
src/error_code.cpp | 4 ++++
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/boost/system/detail/error_code.ipp b/include/boost/system/detail/error_code.ipp
index be51fbb..6187919 100644
--- a/include/boost/system/detail/error_code.ipp
+++ b/include/boost/system/detail/error_code.ipp
@@ -11,10 +11,6 @@
#include
-// define BOOST_SYSTEM_SOURCE so that knows
-// the library is being built (possibly exporting rather than importing code)
-#define BOOST_SYSTEM_SOURCE
-
#include
#include
#include
diff --git a/src/error_code.cpp b/src/error_code.cpp
index a9a8686..aa628ab 100644
--- a/src/error_code.cpp
+++ b/src/error_code.cpp
@@ -9,6 +9,10 @@
//----------------------------------------------------------------------------//
+// define BOOST_SYSTEM_SOURCE so that knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_SYSTEM_SOURCE
+
#include
#ifndef BOOST_ERROR_CODE_HEADER_ONLY
From 1a925ee17b1d85288c76fd5bd2d7b89fdd1d58de Mon Sep 17 00:00:00 2001
From: Beman
Date: Mon, 6 Jan 2014 16:53:25 -0500
Subject: [PATCH 06/12] Update docs to reflect library inclusion in C++11 and
addition of BOOST_ERROR_CODE_HEADER_ONLY
---
doc/index.html | 4 ++--
doc/reference.html | 8 +++++++-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/doc/index.html b/doc/index.html
index 38ab455..e9ff4f4 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -95,7 +95,7 @@ and Windows platforms. These headers are effectively no-ops if included for
platforms other than their intended target.
-
The Boost System Library will become part of the C++0x Standard Library.
+
The Boost System Library is part of the C++11 Standard Library.
A number of changes, particularly to names, were made by the C++ committee
during standardization. The Boost implementation is tracking those changes.
See Deprecated names for
@@ -145,7 +145,7 @@ paper. Johan Nilsson's comments led to several of the refinements in N2066 .
diff --git a/doc/reference.html b/doc/reference.html
index bf54540..d2efbb2 100644
--- a/doc/reference.html
+++ b/doc/reference.html
@@ -89,6 +89,12 @@ provided, so users may ignore these macros if they prefer.
Default
Effect if defined
+
+
BOOST_ERROR_CODE_HEADER_ONLY
+
Not defined.
+
The implementation is header-only, and the
+ Boost.System library is not built. Overrides other link and library macros.
+
BOOST_SYSTEM_DYN_LINK
Defined if BOOST_ALL_DYN_LINK is defined,
@@ -793,7 +799,7 @@ application program interfaces.
Class error_code and error_condition are designed as a value types so
they can be copied
@@ -145,7 +149,7 @@ paper. Johan Nilsson's comments led to several of the refinements in N2066 .